{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {
    "slideshow": {
     "slide_type": "slide"
    }
   },
   "source": [
    "## 赛题背景"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "slideshow": {
     "slide_type": "slide"
    }
   },
   "source": [
    "　　讯飞AI营销云在高速发展的同时，积累了海量的广告数据和用户数据，如何有效利用这些数据去预测用户的广告点击概率，是大数据应用在精准营销中的关键问题，也是所有智能营销平台必须具备的核心技术。\n",
    "\n",
    "本次大赛提供了讯飞AI营销云的海量广告投放数据，参赛选手通过人工智能技术构建预测模型预估用户的广告点击概率，**即给定广告点击相关的广告、媒体、用户、上下文内容等信息的条件下预测广告点击概率**。希望通过本次大赛挖掘AI营销算法领域的顶尖人才，共同推动AI营销的技术革新。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## EDA"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [],
   "source": [
    "import numpy as np\n",
    "import pandas as pd\n",
    "import seaborn as sns\n",
    "import matplotlib.pylab as plt\n",
    "import gc\n",
    "from time import time\n",
    "import datetime\n",
    "sns.set_context(\"paper\")\n",
    "sns.set_style(\"whitegrid\")\n",
    "pd.set_option('display.max_columns', None)\n",
    "%matplotlib inline"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 91,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "<class 'pandas.core.frame.DataFrame'>\n",
      "RangeIndex: 1001650 entries, 0 to 1001649\n",
      "Data columns (total 35 columns):\n",
      " #   Column                 Non-Null Count    Dtype  \n",
      "---  ------                 --------------    -----  \n",
      " 0   instance_id            1001650 non-null  int64  \n",
      " 1   time                   1001650 non-null  int64  \n",
      " 2   city                   1001650 non-null  int64  \n",
      " 3   province               1001650 non-null  int64  \n",
      " 4   user_tags              691880 non-null   object \n",
      " 5   carrier                1001650 non-null  int64  \n",
      " 6   devtype                1001650 non-null  int64  \n",
      " 7   make                   902733 non-null   object \n",
      " 8   model                  994248 non-null   object \n",
      " 9   nnt                    1001650 non-null  int64  \n",
      " 10  os                     1001650 non-null  int64  \n",
      " 11  osv                    993878 non-null   object \n",
      " 12  os_name                1001650 non-null  object \n",
      " 13  adid                   1001650 non-null  int64  \n",
      " 14  advert_id              1001650 non-null  int64  \n",
      " 15  orderid                1001650 non-null  int64  \n",
      " 16  advert_industry_inner  1001650 non-null  object \n",
      " 17  campaign_id            1001650 non-null  int64  \n",
      " 18  creative_id            1001650 non-null  int64  \n",
      " 19  creative_tp_dnf        1001650 non-null  int64  \n",
      " 20  app_cate_id            999383 non-null   float64\n",
      " 21  f_channel              76390 non-null    object \n",
      " 22  app_id                 999383 non-null   float64\n",
      " 23  inner_slot_id          1001650 non-null  object \n",
      " 24  creative_type          1001650 non-null  int64  \n",
      " 25  creative_width         1001650 non-null  int64  \n",
      " 26  creative_height        1001650 non-null  int64  \n",
      " 27  creative_is_jump       1001650 non-null  bool   \n",
      " 28  creative_is_download   1001650 non-null  bool   \n",
      " 29  creative_is_js         1001650 non-null  bool   \n",
      " 30  creative_is_voicead    1001650 non-null  bool   \n",
      " 31  creative_has_deeplink  1001650 non-null  bool   \n",
      " 32  app_paid               1001650 non-null  bool   \n",
      " 33  advert_name            1001650 non-null  object \n",
      " 34  click                  1001650 non-null  int64  \n",
      "dtypes: bool(6), float64(2), int64(18), object(9)\n",
      "memory usage: 227.3+ MB\n"
     ]
    }
   ],
   "source": [
    "# 读取AB 榜单数据集\n",
    "train1 = pd.read_table(\n",
    "    \"E:\\练习\\广告点击概率预测\\第一轮\\数据集\\round1_iflyad_train.txt\")\n",
    "train1.info()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 92,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "<class 'pandas.core.frame.DataFrame'>\n",
      "RangeIndex: 1998350 entries, 0 to 1998349\n",
      "Data columns (total 35 columns):\n",
      " #   Column                 Dtype  \n",
      "---  ------                 -----  \n",
      " 0   instance_id            int64  \n",
      " 1   time                   int64  \n",
      " 2   city                   int64  \n",
      " 3   province               int64  \n",
      " 4   user_tags              object \n",
      " 5   carrier                int64  \n",
      " 6   devtype                int64  \n",
      " 7   make                   object \n",
      " 8   model                  object \n",
      " 9   nnt                    int64  \n",
      " 10  os                     int64  \n",
      " 11  osv                    object \n",
      " 12  os_name                object \n",
      " 13  adid                   int64  \n",
      " 14  advert_id              int64  \n",
      " 15  orderid                int64  \n",
      " 16  advert_industry_inner  object \n",
      " 17  campaign_id            int64  \n",
      " 18  creative_id            int64  \n",
      " 19  creative_tp_dnf        int64  \n",
      " 20  app_cate_id            float64\n",
      " 21  f_channel              object \n",
      " 22  app_id                 float64\n",
      " 23  inner_slot_id          object \n",
      " 24  creative_type          int64  \n",
      " 25  creative_width         int64  \n",
      " 26  creative_height        int64  \n",
      " 27  creative_is_jump       bool   \n",
      " 28  creative_is_download   bool   \n",
      " 29  creative_is_js         bool   \n",
      " 30  creative_is_voicead    bool   \n",
      " 31  creative_has_deeplink  bool   \n",
      " 32  app_paid               bool   \n",
      " 33  advert_name            object \n",
      " 34  click                  int64  \n",
      "dtypes: bool(6), float64(2), int64(18), object(9)\n",
      "memory usage: 453.6+ MB\n"
     ]
    }
   ],
   "source": [
    "train2 = pd.read_table(\n",
    "    \"data/competitiondata6532/科大讯飞复赛/round2_iflyad_train.txt\")\n",
    "train2.info()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 93,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "<class 'pandas.core.frame.DataFrame'>\n",
      "RangeIndex: 3000000 entries, 0 to 2999999\n",
      "Data columns (total 35 columns):\n",
      " #   Column                 Dtype  \n",
      "---  ------                 -----  \n",
      " 0   instance_id            int64  \n",
      " 1   time                   int64  \n",
      " 2   city                   int64  \n",
      " 3   province               int64  \n",
      " 4   user_tags              object \n",
      " 5   carrier                int64  \n",
      " 6   devtype                int64  \n",
      " 7   make                   object \n",
      " 8   model                  object \n",
      " 9   nnt                    int64  \n",
      " 10  os                     int64  \n",
      " 11  osv                    object \n",
      " 12  os_name                object \n",
      " 13  adid                   int64  \n",
      " 14  advert_id              int64  \n",
      " 15  orderid                int64  \n",
      " 16  advert_industry_inner  object \n",
      " 17  campaign_id            int64  \n",
      " 18  creative_id            int64  \n",
      " 19  creative_tp_dnf        int64  \n",
      " 20  app_cate_id            float64\n",
      " 21  f_channel              object \n",
      " 22  app_id                 float64\n",
      " 23  inner_slot_id          object \n",
      " 24  creative_type          int64  \n",
      " 25  creative_width         int64  \n",
      " 26  creative_height        int64  \n",
      " 27  creative_is_jump       bool   \n",
      " 28  creative_is_download   bool   \n",
      " 29  creative_is_js         bool   \n",
      " 30  creative_is_voicead    bool   \n",
      " 31  creative_has_deeplink  bool   \n",
      " 32  app_paid               bool   \n",
      " 33  advert_name            object \n",
      " 34  click                  int64  \n",
      "dtypes: bool(6), float64(2), int64(18), object(9)\n",
      "memory usage: 680.9+ MB\n"
     ]
    }
   ],
   "source": [
    "# 合并AB榜单数据\n",
    "train = pd.concat([train2, train1], ignore_index=True)\n",
    "train.info()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 94,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "<class 'pandas.core.frame.DataFrame'>\n",
      "RangeIndex: 2992639 entries, 0 to 2992638\n",
      "Data columns (total 35 columns):\n",
      " #   Column                 Dtype  \n",
      "---  ------                 -----  \n",
      " 0   instance_id            int64  \n",
      " 1   time                   int64  \n",
      " 2   city                   int64  \n",
      " 3   province               int64  \n",
      " 4   user_tags              object \n",
      " 5   carrier                int64  \n",
      " 6   devtype                int64  \n",
      " 7   make                   object \n",
      " 8   model                  object \n",
      " 9   nnt                    int64  \n",
      " 10  os                     int64  \n",
      " 11  osv                    object \n",
      " 12  os_name                object \n",
      " 13  adid                   int64  \n",
      " 14  advert_id              int64  \n",
      " 15  orderid                int64  \n",
      " 16  advert_industry_inner  object \n",
      " 17  campaign_id            int64  \n",
      " 18  creative_id            int64  \n",
      " 19  creative_tp_dnf        int64  \n",
      " 20  app_cate_id            float64\n",
      " 21  f_channel              object \n",
      " 22  app_id                 float64\n",
      " 23  inner_slot_id          object \n",
      " 24  creative_type          int64  \n",
      " 25  creative_width         int64  \n",
      " 26  creative_height        int64  \n",
      " 27  creative_is_jump       bool   \n",
      " 28  creative_is_download   bool   \n",
      " 29  creative_is_js         bool   \n",
      " 30  creative_is_voicead    bool   \n",
      " 31  creative_has_deeplink  bool   \n",
      " 32  app_paid               bool   \n",
      " 33  advert_name            object \n",
      " 34  click                  int64  \n",
      "dtypes: bool(6), float64(2), int64(18), object(9)\n",
      "memory usage: 679.3+ MB\n"
     ]
    }
   ],
   "source": [
    "# 消除合并后的重复数据\n",
    "train = train.drop_duplicates().reset_index(drop=True)  # dorp不增加新的索引\n",
    "train.info()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 95,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "<class 'pandas.core.frame.DataFrame'>\n",
      "RangeIndex: 80276 entries, 0 to 80275\n",
      "Data columns (total 34 columns):\n",
      " #   Column                 Non-Null Count  Dtype  \n",
      "---  ------                 --------------  -----  \n",
      " 0   instance_id            80276 non-null  int64  \n",
      " 1   time                   80276 non-null  int64  \n",
      " 2   city                   80276 non-null  int64  \n",
      " 3   province               80276 non-null  int64  \n",
      " 4   user_tags              53562 non-null  object \n",
      " 5   carrier                80276 non-null  int64  \n",
      " 6   devtype                80276 non-null  int64  \n",
      " 7   make                   71907 non-null  object \n",
      " 8   model                  79523 non-null  object \n",
      " 9   nnt                    80276 non-null  int64  \n",
      " 10  os                     80276 non-null  int64  \n",
      " 11  osv                    79434 non-null  object \n",
      " 12  os_name                80276 non-null  object \n",
      " 13  adid                   80276 non-null  int64  \n",
      " 14  advert_id              80276 non-null  int64  \n",
      " 15  orderid                80276 non-null  int64  \n",
      " 16  advert_industry_inner  80276 non-null  object \n",
      " 17  campaign_id            80276 non-null  int64  \n",
      " 18  creative_id            80276 non-null  int64  \n",
      " 19  creative_tp_dnf        80276 non-null  int64  \n",
      " 20  app_cate_id            80213 non-null  float64\n",
      " 21  f_channel              6921 non-null   object \n",
      " 22  app_id                 80213 non-null  float64\n",
      " 23  inner_slot_id          80276 non-null  object \n",
      " 24  creative_type          80276 non-null  int64  \n",
      " 25  creative_width         80276 non-null  int64  \n",
      " 26  creative_height        80276 non-null  int64  \n",
      " 27  creative_is_jump       80276 non-null  bool   \n",
      " 28  creative_is_download   80276 non-null  bool   \n",
      " 29  creative_is_js         80276 non-null  bool   \n",
      " 30  creative_is_voicead    80276 non-null  bool   \n",
      " 31  creative_has_deeplink  80276 non-null  bool   \n",
      " 32  app_paid               80276 non-null  bool   \n",
      " 33  advert_name            80276 non-null  object \n",
      "dtypes: bool(6), float64(2), int64(17), object(9)\n",
      "memory usage: 17.6+ MB\n"
     ]
    }
   ],
   "source": [
    "# 处理测试\n",
    "label = \"click\"\n",
    "test = pd.read_table(\n",
    "    \"data/competitiondata6532/科大讯飞复赛/round2_iflyad_test_feature.txt\")\n",
    "test.info()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 96,
   "metadata": {},
   "outputs": [],
   "source": [
    "# 添加预测标签一列并保留测试集的index\n",
    "test[label] = -1\n",
    "res = test.instance_id  # 用作找出测试集合"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 97,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>instance_id</th>\n",
       "      <th>time</th>\n",
       "      <th>city</th>\n",
       "      <th>province</th>\n",
       "      <th>user_tags</th>\n",
       "      <th>carrier</th>\n",
       "      <th>devtype</th>\n",
       "      <th>make</th>\n",
       "      <th>model</th>\n",
       "      <th>nnt</th>\n",
       "      <th>os</th>\n",
       "      <th>osv</th>\n",
       "      <th>os_name</th>\n",
       "      <th>adid</th>\n",
       "      <th>advert_id</th>\n",
       "      <th>orderid</th>\n",
       "      <th>advert_industry_inner</th>\n",
       "      <th>campaign_id</th>\n",
       "      <th>creative_id</th>\n",
       "      <th>creative_tp_dnf</th>\n",
       "      <th>app_cate_id</th>\n",
       "      <th>f_channel</th>\n",
       "      <th>app_id</th>\n",
       "      <th>inner_slot_id</th>\n",
       "      <th>creative_type</th>\n",
       "      <th>creative_width</th>\n",
       "      <th>creative_height</th>\n",
       "      <th>creative_is_jump</th>\n",
       "      <th>creative_is_download</th>\n",
       "      <th>creative_is_js</th>\n",
       "      <th>creative_is_voicead</th>\n",
       "      <th>creative_has_deeplink</th>\n",
       "      <th>app_paid</th>\n",
       "      <th>advert_name</th>\n",
       "      <th>click</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>3930259662664932943</td>\n",
       "      <td>2190123770</td>\n",
       "      <td>137106103108100</td>\n",
       "      <td>137106103100100</td>\n",
       "      <td>,3003303,3003319,3003371,3003375,3003379,30034...</td>\n",
       "      <td>1</td>\n",
       "      <td>2</td>\n",
       "      <td>vivo</td>\n",
       "      <td>vivo X7</td>\n",
       "      <td>1</td>\n",
       "      <td>2</td>\n",
       "      <td>5.1.1</td>\n",
       "      <td>android</td>\n",
       "      <td>1579724</td>\n",
       "      <td>230000191</td>\n",
       "      <td>3012252</td>\n",
       "      <td>101700_101704</td>\n",
       "      <td>1003348</td>\n",
       "      <td>2338806</td>\n",
       "      <td>8390272894417697957</td>\n",
       "      <td>107.0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>1000049.0</td>\n",
       "      <td>xf_64FAC0085FC8DC679F6BF49A1F98445D</td>\n",
       "      <td>5</td>\n",
       "      <td>320</td>\n",
       "      <td>480</td>\n",
       "      <td>False</td>\n",
       "      <td>True</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>42A4CB9035B7F50E</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>756979276878126082</td>\n",
       "      <td>2190123240</td>\n",
       "      <td>137105104101100</td>\n",
       "      <td>137105104100100</td>\n",
       "      <td>3003779,3003843,3003851,3003863,3003865,300386...</td>\n",
       "      <td>0</td>\n",
       "      <td>2</td>\n",
       "      <td>NaN</td>\n",
       "      <td>OPPO A59s</td>\n",
       "      <td>1</td>\n",
       "      <td>2</td>\n",
       "      <td>5.1</td>\n",
       "      <td>android</td>\n",
       "      <td>1577884</td>\n",
       "      <td>230001710</td>\n",
       "      <td>3011304</td>\n",
       "      <td>101900_101902</td>\n",
       "      <td>1003544</td>\n",
       "      <td>2342152</td>\n",
       "      <td>8390229093704413749</td>\n",
       "      <td>100.0</td>\n",
       "      <td>iqy_4</td>\n",
       "      <td>2071234.0</td>\n",
       "      <td>iqy_1000000000381-1-5-60</td>\n",
       "      <td>3</td>\n",
       "      <td>1280</td>\n",
       "      <td>720</td>\n",
       "      <td>True</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>0A421D7B11EABFC5</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>7780287653491016973</td>\n",
       "      <td>2190124101</td>\n",
       "      <td>137106101103100</td>\n",
       "      <td>137106101100100</td>\n",
       "      <td>3004430,3004434</td>\n",
       "      <td>1</td>\n",
       "      <td>2</td>\n",
       "      <td>HUAWEI</td>\n",
       "      <td>BAC-TL00</td>\n",
       "      <td>1</td>\n",
       "      <td>2</td>\n",
       "      <td>8.0.0</td>\n",
       "      <td>android</td>\n",
       "      <td>1547112</td>\n",
       "      <td>230000063</td>\n",
       "      <td>3006301</td>\n",
       "      <td>102400_102401</td>\n",
       "      <td>1000023</td>\n",
       "      <td>2338420</td>\n",
       "      <td>8390267734059046014</td>\n",
       "      <td>107.0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>2089229.0</td>\n",
       "      <td>xf_275C061483984E075832A4373BDDF27B</td>\n",
       "      <td>8</td>\n",
       "      <td>1280</td>\n",
       "      <td>720</td>\n",
       "      <td>True</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>B4734117F35EE97F</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>8958262564607084969</td>\n",
       "      <td>2190123828</td>\n",
       "      <td>137104104113100</td>\n",
       "      <td>137104104100100</td>\n",
       "      <td>ag_2100036,gd_2100000,3001749,3001989,3002121,...</td>\n",
       "      <td>2</td>\n",
       "      <td>2</td>\n",
       "      <td>Xiaomi</td>\n",
       "      <td>Redmi Note 2</td>\n",
       "      <td>1</td>\n",
       "      <td>2</td>\n",
       "      <td>5.0.2</td>\n",
       "      <td>android</td>\n",
       "      <td>1558792</td>\n",
       "      <td>230000833</td>\n",
       "      <td>3005551</td>\n",
       "      <td>4_100206</td>\n",
       "      <td>1002835</td>\n",
       "      <td>2340236</td>\n",
       "      <td>8390266143715132170</td>\n",
       "      <td>100.0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>2070583.0</td>\n",
       "      <td>xf_1CD92C3D58A87EEB0531A5A5BD6D7EAC</td>\n",
       "      <td>5</td>\n",
       "      <td>320</td>\n",
       "      <td>480</td>\n",
       "      <td>True</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>862FF2E9B0AD4C14</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>2216398346534608981</td>\n",
       "      <td>2190122178</td>\n",
       "      <td>137105104106100</td>\n",
       "      <td>137105104100100</td>\n",
       "      <td>NaN</td>\n",
       "      <td>1</td>\n",
       "      <td>2</td>\n",
       "      <td>OPPO</td>\n",
       "      <td>OPPO-R9s</td>\n",
       "      <td>3</td>\n",
       "      <td>2</td>\n",
       "      <td>6.0.1</td>\n",
       "      <td>android</td>\n",
       "      <td>1547112</td>\n",
       "      <td>230000063</td>\n",
       "      <td>3006301</td>\n",
       "      <td>102400_102401</td>\n",
       "      <td>1000023</td>\n",
       "      <td>2338420</td>\n",
       "      <td>8390267734059046014</td>\n",
       "      <td>107.0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>2089229.0</td>\n",
       "      <td>xf_275C061483984E075832A4373BDDF27B</td>\n",
       "      <td>8</td>\n",
       "      <td>1280</td>\n",
       "      <td>720</td>\n",
       "      <td>True</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>B4734117F35EE97F</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "           instance_id        time             city         province  \\\n",
       "0  3930259662664932943  2190123770  137106103108100  137106103100100   \n",
       "1   756979276878126082  2190123240  137105104101100  137105104100100   \n",
       "2  7780287653491016973  2190124101  137106101103100  137106101100100   \n",
       "3  8958262564607084969  2190123828  137104104113100  137104104100100   \n",
       "4  2216398346534608981  2190122178  137105104106100  137105104100100   \n",
       "\n",
       "                                           user_tags  carrier  devtype  \\\n",
       "0  ,3003303,3003319,3003371,3003375,3003379,30034...        1        2   \n",
       "1  3003779,3003843,3003851,3003863,3003865,300386...        0        2   \n",
       "2                                    3004430,3004434        1        2   \n",
       "3  ag_2100036,gd_2100000,3001749,3001989,3002121,...        2        2   \n",
       "4                                                NaN        1        2   \n",
       "\n",
       "     make         model  nnt  os    osv  os_name     adid  advert_id  orderid  \\\n",
       "0    vivo       vivo X7    1   2  5.1.1  android  1579724  230000191  3012252   \n",
       "1     NaN     OPPO A59s    1   2    5.1  android  1577884  230001710  3011304   \n",
       "2  HUAWEI      BAC-TL00    1   2  8.0.0  android  1547112  230000063  3006301   \n",
       "3  Xiaomi  Redmi Note 2    1   2  5.0.2  android  1558792  230000833  3005551   \n",
       "4    OPPO      OPPO-R9s    3   2  6.0.1  android  1547112  230000063  3006301   \n",
       "\n",
       "  advert_industry_inner  campaign_id  creative_id      creative_tp_dnf  \\\n",
       "0         101700_101704      1003348      2338806  8390272894417697957   \n",
       "1         101900_101902      1003544      2342152  8390229093704413749   \n",
       "2         102400_102401      1000023      2338420  8390267734059046014   \n",
       "3              4_100206      1002835      2340236  8390266143715132170   \n",
       "4         102400_102401      1000023      2338420  8390267734059046014   \n",
       "\n",
       "   app_cate_id f_channel     app_id                        inner_slot_id  \\\n",
       "0        107.0       NaN  1000049.0  xf_64FAC0085FC8DC679F6BF49A1F98445D   \n",
       "1        100.0     iqy_4  2071234.0             iqy_1000000000381-1-5-60   \n",
       "2        107.0       NaN  2089229.0  xf_275C061483984E075832A4373BDDF27B   \n",
       "3        100.0       NaN  2070583.0  xf_1CD92C3D58A87EEB0531A5A5BD6D7EAC   \n",
       "4        107.0       NaN  2089229.0  xf_275C061483984E075832A4373BDDF27B   \n",
       "\n",
       "   creative_type  creative_width  creative_height  creative_is_jump  \\\n",
       "0              5             320              480             False   \n",
       "1              3            1280              720              True   \n",
       "2              8            1280              720              True   \n",
       "3              5             320              480              True   \n",
       "4              8            1280              720              True   \n",
       "\n",
       "   creative_is_download  creative_is_js  creative_is_voicead  \\\n",
       "0                  True           False                False   \n",
       "1                 False           False                False   \n",
       "2                 False           False                False   \n",
       "3                 False           False                False   \n",
       "4                 False           False                False   \n",
       "\n",
       "   creative_has_deeplink  app_paid       advert_name  click  \n",
       "0                  False     False  42A4CB9035B7F50E      0  \n",
       "1                  False     False  0A421D7B11EABFC5      0  \n",
       "2                  False     False  B4734117F35EE97F      0  \n",
       "3                  False     False  862FF2E9B0AD4C14      0  \n",
       "4                  False     False  B4734117F35EE97F      1  "
      ]
     },
     "execution_count": 97,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "train.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 98,
   "metadata": {},
   "outputs": [],
   "source": [
    "# 测试集和训练集合一起处理\n",
    "data = pd.concat([train, test], ignore_index=True)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 查看时间与点击量的相关信息"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 99,
   "metadata": {},
   "outputs": [],
   "source": [
    "# 处理时间戳函数\n",
    "def get_time(attr):\n",
    "    \"\"\"从时间戳获得具体的时间信息\"\"\"\n",
    "\n",
    "    day = []\n",
    "    hour = []\n",
    "    for time in attr:\n",
    "        t = datetime.datetime.fromtimestamp(time + 3600*24*5)  # 加5天\n",
    "        day.append(t.day)\n",
    "        hour.append(t.hour)\n",
    "\n",
    "    return day, hour"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 100,
   "metadata": {},
   "outputs": [],
   "source": [
    "train_df = train.copy()\n",
    "train_df[\"day\"], train_df[\"hour\"] = get_time(train_df.time.values)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 101,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 864x432 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "# 绘制不同时刻的点击情况\n",
    "hour_info = train_df.groupby([\"hour\", \"click\"])[\"hour\"].count()\n",
    "hour_info = hour_info.unstack()  # 构成数映射表\n",
    "hour_info[[0, 1]].plot(kind=\"bar\", stacked=True, figsize=(12, 6))  # 堆叠显示\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 102,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 864x432 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "hour_info.plot(figsize=(12, 6))\n",
    "plt.xticks(np.arange(0, 24, 6))\n",
    "plt.title(\"The plot of click in different hour\", fontsize=15)\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "结论: 具体每一个时间的点击率有所不同(将连续的时间离散化),可以将时间划分为四个不同的时间间隔,间隔六小时"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 不同时间段的点击情况"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 103,
   "metadata": {},
   "outputs": [],
   "source": [
    "def seg_hour(x):\n",
    "    \"\"\"划分时间间隔\"\"\"\n",
    "\n",
    "    if x > 0 and x <= 6:\n",
    "        return 1\n",
    "    elif x > 6 and x <= 12:\n",
    "        return 2\n",
    "    elif x > 12 and x <= 18:\n",
    "        return 3\n",
    "    else:\n",
    "        return 4"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 104,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "train_df[\"hour_seg\"] = train_df.hour.apply(lambda x: seg_hour(x))\n",
    "seg_hour = train_df.groupby([\"hour_seg\", \"click\"]).hour_seg.count().unstack()\n",
    "seg_hour[[0, 1]].plot(kind=\"bar\")\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "结论:对用户的分时段之后可以看出用户时间分布情况。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 查看样本的均衡情况"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 105,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAR4AAAEsCAYAAAAVe9xwAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4yLjIsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy+WH4yJAAAgAElEQVR4nO3dd3RUdf7/8de9d+6UZEpmJp0AIQSGKh0URKmKgNjXAuoi8oWvrm3Xtfx0i3Xd1d11/a6rLLr2XaRYQGmKSFN6kzaUUBLSZiaTzEwm0+/vj4Q1IAoJyf3cO/N+nMM5EkLmnZg8ufVzOUmSQAghcuJZD0AIST0UHkKI7Cg8hBDZUXgIIbKj8BBCZEfhIYTITsN6AKI8DoejI4D/A9AXQC2AAwC2AshxOp2PORyOpwEsdzqd3/zI338bwDyn07lcppGJylB4yGkcDgcH4GMArzidzmub3nYFgAIAOQDgdDp/y25CkgxoV4ucaSwAv9PpfPfUG5xO50oAiVO/dzgcbzscjglN/z3c4XBsdjgcuxwOx7LmH8jhcPAOh+NNh8PxuFzDE3Wg8JAz9QKw83ze0eFw6AC8C+BOp9PZD8DUZn/MA5gLoMTpdP6hzackqkbhIWdzvvfROAAcdjqd+wHA6XTWNPuzFwBUO53O59p6OKJ+FB5ypv0ABrTBx9kM4FKHw5HWBh+LJBkKDznTlwAsDodj2qk3OByOcTj798oBAF0dDkfPpvezNfuzhQA+ADDf4XDQSQxyGgoPOY3T6ZQAXAvgZw6H44jD4dgL4E4A5rO8bwTAHQDedTgcu9B4vKf5n78OYBOAN5vOlhECAOBoWQxCiNxoi4cQIjsKDyFEdhQeQojsKDyEENlReAghsqPwEEJkR+EhhMiOwkMIkR2FhxAiOwoPIUR2FB5CiOwoPIQQ2VF4CCGyo/AQQmRH4SGEyI7CQwiRHYWHECI7Cg8hRHYUHkKI7Cg8hBDZUXgIIbKj8BBCZEfhIYTIjsJDCJEdhYcQIjsKDyFEdhQeQojsKDyEENlReAghsqPwEEJkR+EhhMhOw3oAolo8gMEAEgDiTb8iADwAapp+T8hZUXhIa10J18F5qNwVAa8BeI0EjV5Cmh0wWDkI2jh4TRxI1CMR9wCoBq8pR5ptDwTtXgD7AbgASGw/DcIChYe0lgYHlvBY9XTmT76XaADS7E2/MgFrYRz5/eqQ0zcGY44Enq9DIn4Aessm6Ey7AXwH4AQoSEmNwkPaV7QBqCtr/NVIAGD7759r03Ng79Ydmd2mIPciPzoObYC1MIFE/Duk2RdD1K9G49ZRQv7hSXuh8BC2IvVAxc7GX98tMAEwgeOA7F656DxiFLpdUYvcPhKkxBHozJ9BZ/oCwDZQiFSNwkOUR5KAqr1A1V4Rm/+ZBQCwFmaj0/Bh6DHxIRQMjQHSlzDlvglgHehAtupQeIg6eI8B3mM8dv07E7wGKBw5Df1umYSiUVFIifUw588F8BUaz6wRhaPwEPVJxICS1UDJais4Hug47HpcdPMYdL8yCnCbYc77I4D1oAPUikXhIeomJYAT3wInvs0AAHQcOgmX3HcJOg3zQUx7GTrTWwB8bIckZ6LwkDQAWQAym35ZAYho/N4Q0Ljr8gHUchyldDNQersNBqsNg37+AgbPeAKCZhVMeX8AsFuuMRwOhwjgawC9AdztdDoXyvXaakDhSW4CgC4AevhD0f7+UGwIx6Gzhucz4glJjCckTTAS42rqI1K1P8xX+8OiJxDWRWIJIZaQuHhCEn4+vDDQNdu4AcARxp9LyzR4gfV/1WPDy3oUjbkFlz44DpndXdBbnodo+A/aP6QxADcCmNXOr6NKFJ7k0RHAcHcgPDQSSwzUCFxRJJYwHPcEpT3ldYZ95T7TEVcAJ70NqGuIInGeRz/G98pp6JptbNfB25UkAUdWAUdWZcLcIRMjHvgHel/7HLTGJ6BNb7cAOZ1OCUCFw+Fojw+vehQedeIAdA9H46M89ZFrRIHvX+YNatYcdBn3lvsMR6oDOFETROx865IqfCeBZY+YsPZFEy5/9FX0mvIs9JbHoNHPB10XJCsKj3p0D4RjV/saolcLPNfzcHWA++pAtWVjiUe7v8J33lswBEC9C1j6sBlrXzRj1GNz0GPS89BZHoWoXwQKkCwoPMrFAxji9odvT0CaUuKq1y/eWW7bdNQjHHHVs54tOQSqgM8eMmPNn8wY/f/movuVL8BguxeCuJz1aMmOwqMsHIAhLn94pgRp0vbjteJH28vs6w65uYaoOk4qqZK/Alh8nwWWAgsmv/xv5F20HcacnwMoO9df/SkOh2M+GpcOCTgcjqFOp/ORthg3GVB4lKFDTX3kwXhCum3HCa9u3pZS+7pDLkTjtP8kq7oy4IMbreg6ZjQmv7wDOtMrSLO9ACDamg/ndDp/1sYTJg0KDzscgNGVvtBvfA3R3nPWlFg/212uCcfoEANzR77i8eqQTIx8+FEM+vl0pNnvBC+sYz1WMqHwyM/ia4jeHY4l7t9Y4jHOWXvEtuckXVirOLEwsPq5dOz8oAuu+ccnyCxeB2PO/wCoZj1aMqDwyKd7lS/0TDSeGP3ut8dN87ac0PsaYqxnIufiPQa8PdGGHpMnY+KL30GfcS+0aXQV8gWi8LS/rtW+0F/cgcjwF5btz1x32A2JDt2oz4HPBBzfkI3r5/4Tef1uhjF7OoAA67HUisLTfjpX+0Iv1TZERz3z2T77ukNujvVA5AI1eBsPPvefOgXjfrcPxpwbAGxhPZYaUXjaXgeXP/wnX0P0iueX7retOlBNjxBKNjs/0OL4ho64dd5yGHNeajrzRduxLUDhaTsZLn/4z/Xh2JQ/LNtvW7G3ioKTzLzHgDmX2TDhhcfQ8+qrYMy+Do2P9iHngcJz4bj6cOyOQDj2xxdXOG2LtpeJdAwnRcQjwOe/NOPwl8Nx9d92wph9JYB9rMdSAwrPhXG4/OEP1hx0FT/92V4LnaVKUc6lAmpKCjB14RoYs6ZBo1/BeiSlo92B1jG4A+G/Hq4ObJj57tZBDy/YRdFJda4DwNxRmXAd/DcavPezHkfpKDwtFI0nJrr84YOvfX1k9pUvr7XvLK1lPRJRino38OY4G45veAoB11w0LsRGzoLCc/5Mbn/4ow2H3e9PemVdwZvrj+rjtBYFOVMsDMybmoHt79yCgOsrACpeRa390DGe83OJyx/+8IVl+3MWbT+pZT0MUYGvnjHCdeBiTPjDNqRnXQagivVISkLh+WmCJxB+rtIXmjnrvW22Mm8D63mImny3QAt/ZTFu/Ne3MGYPB1DJeiSloF2tH5frDoQ3zt9adu+Uv2+g6JDWObaOx8LpnRGo/gZAHutxlILCcxbReGJsZV1o54Pzdg784/IDRjqWQy7IsfU8FtxJ8WmGwnM6rqY+8vi+Ct/8q/++Pmf9YTd9fUjbOP4Nj/l3dEag+lsA+azHYY1+sL6ncfnD764/5Hr0xte+sbn8YdbzkGRz4lsO82/v1BSfDqzHYYnC08jsDoTXvbfx+HX3z9tpoSVHSbs5sZHDh9M6Nu125bAehxUKD9DJHQhv//3ivYNeWXUonfUwJAWUbuKwaEZB03U+aazHYSHVwzO4yhfaNPOdrUWf7a4QWQ9DUsjRtTxWPdUVgerFSMGfw5T7hE8JhGLXHXPXL7/htW9yd5TW0iJdRH473tNh57+HIeD6B+tR5JaS4akPx24qqw2+MeXV9Xa6Pocw9eXvjCjbfDOCNQ+yHkVOKRee+nDsplJv8PWfvf6tje4oJ4qwcHoG6kp/i2hwEutR5JJS4akPx278b3RCFB2iELEw8N61VgRcbwPox3ocOaRMeALh2A2l3uAcig5RpGAN8P51mQhUfwbAwnqc9pYS4QmEYzeUeYP/pOgQRfMcAZY/noNA9Tw0Pmk2aSV9eAKh2HUnvQ0UHaIOexaKOLrmYjTUzmY9SntK9vAMcQfCc2+a8w1Fh6jH4vsz0OB9BkAv1qO0l2QOT6cqX2jxtDc32ensFVGVaBCYd5sdAdcSAAbW47SHZA2P2R0IfzX7vW25dJ0OUaXqfcCaP+YjUP0G61HaQzKGR+MOhJc9tWRfpx20EDtRsy1z9ajcfRUigZtZj9LWki487kD4zfc3Hu+3ZFc53XtF1G/hDCvC/r8BsLIepS0lVXi8wcivNx+tueblL+kuc5IkQrXAyt/YEKhKqvu5kiY80XhiXJm34bEH5+1M+ouvSIr5boEI77ErAFzCepS2kizhya2pj7x/19tbbJF4gvUspI08vtGMSz7KwuSl9v++7YBXg5tX2nD1Ujtmr8lAIHr26+zecaZh8lI7Jn1ux9sHvl/y5sWdRly91I5Hvv3+36dPj+pPex9F+ni2DYHq9wAkxSGEZAiP4A6EF/9q/q4sWq40uVxf1IA3RnlPe9sTmy34VX8/lkz0YFxBGG/s/+Fe9cFaDRYcMWDBFR58epUHX5frcNwvwB/hsK9GxJKJHoi8BGetBqEY8NFRA6Z2D8r1abVOTQmw7e1cBD2Psx6lLag+PJ5A+OlF28p60sLsyWdIdhQW7enL0B7zCxiSFQUAjMgNY2Wp/gd/74hPwEX2KAwaQMMDQ7IjWFmqB8cBMYmDJAGhOAcNL+HNA+m4vXsQohq+e9a+mI6Q7z4AnVmPcqHU8OX+KcOqfKHZf1rhpMfEpohulhhWndQBAJaX6lER/OG3cHdLDNtcWnjDHBpiwNpyHSqDPIyihMvywrh2uR1Z+gRMooTdHhHjClSypRyPAIt/YUeg6n2o/F4uNT9J1OjyhxfMen+bjZ57lTqeG1aH57aZ8Y89RozpEIL2LP90drXEcXfPesxYbYNBI6GHNQa+6cd0Zq96zOxVDwB4YpMZ9/cNYMERA9ZXaOHIiOGePvUyfjatcGw9h7ItvdH9qnHghS9Yj9Naqt3icfnD/3pxxYGc0hq6MjmVdDXH8a/RXnw0wYNJnUPoaDz77TA3dW3ARxM8+GBcDSzaBArNp7/fvhoNJABdzHEsP6HH3y6tQ2lAwDG/IMNncYFWPGlF0P0KVLzVo8rwROOJifsrfOPmby3Tsp6FyMsTavyWTUjAa3uNuKX47P/wnHq/8noeK0v1uLpz6LQ//9t3RjzQN4BYAjj1NCOOA0IxFfwse48CR77ORTw6hfUoraXGXS1DbTA65+EFu5LqSk7yQ7/cYMHmai28YR6XfZKF+/oGEIxx+PehxlPf4wtCuKGoMTxVQR5PbrZgbtNZsPvWZ6A2zEPDS/jdYB/MzQ5Sf1mmQx9bDDlpjZde9LTGcPVSO7pnxNDDqpIbilc9lYGuo/4CY84SAKq7hkR14fEEws/OWXvEXk2nzpPeX0bUnfXtdzp+eOo7Jy3x3+gAwL/H1fzoxx1XED7tgPKjA/x4dMAFDMqC7yTgXGbHRTffDNHwH9bjtJTadrW61zZE73xrw7GkXCqAkBZZ/ZwFYf8LUOEGhJrCw7n84Q8enr/LTmexCAEQqAa+W2hFpP5O1qO0lGrCE4zEbl1/2F1MS10Q0szaP5kQCTwFlW31qCU85kAo9uenluzNYD0IIYrS4AX2LTYhHruG9SgtoYrwuPzhl/78xUFbbTDKehRClGfjP8wIun/DeoyWUEN48uvDsevmby2la3YIOZuaEsB7rANUtDi84sNT7Q+98MLyAzaJjicT8uPWvmSHv/IJ1mOcL6WHp2MgFLtqxd5Kpc9JCFtHvuQQj46HSp5Cqugf6Gpf6I/PL6WtHULOSZKAzXNMCNXdzXqU86Hk8BT6QrHxX+6vUvKMhCjH9vf0iIUegLJ/rgEoeMBqX+jF5z7fZ2M9ByGqEaoFStYYAYxmPcq5KDU8Xb3B6KjVTpdS5yNEmba+aYWv/BesxzgXRf5gV/tCz76wbL/93O9JCDlN6SYAGAFAx3iSn6TE8JijcWns1wddKlgYhRCFkSRg/xIdEvEJrEf5KYoLjz8UnfH+xuMmOpNFSCvkDwSMOQKCnomsR/kpSruxjAtF4/f/Z8uJHz46gBBydh0GAhfd4kOPyWFw3FaY818HsJL1WD9FaeEZufW410z3ZBFyDh0GAf1u8cExKXRGbFSxQp6iwlNZF3pyzpoSOoVOyNkUDAYuurUOPSZGAGxuis0XUElsmlNSeHKCkdiAnbTeDiGNOA7oMBjod2sdHFeF8X1svoQKY9OcYsLjrY/8Yu66ElXcZ0JIu+E4oGBIY2y6TwgD2Ahz/hw0xibCeLo2o5TwcLGENP2THeVJ8UB6QlqE44CCoU2xuTIMSBth7vA6gFVIotg0p5TwDNxdVqtriMZZz0GIPDgO6DgM6HdrLbpdGQWkb5p2o75CksamOUWEx+UPz/hwSyldqUySG8cBHS9uis0VkabYzEHjlk1KncpVQng4CdI1a+hKZZKMOB7odCo24yOQpA1NsfkKrYsNB6CvOxCezgE3mfTivVoN/2nbDt3+lBCeQbtK67ThmOoehkjI2Z2KTf+ptSgeG4EkrW+KzWq0PjYXuQPh6ZIk3bCvwq//cEup7aQ3yL9++6CH8iwGCk9LeQLh2z7aXka7WUTdOB7odAnQ/zYvisdGIUlrYc7/J4Cv0frY9HMHwtMTknT9vnKf/sMtpfavnS6u+bHQRAK9ABgAnP0h8grFPDxxSbpuLe1mETXieKDzcKDff2OzBua8U7FpzUPYOQD9G7dscP3e8jrdh1tK7aud1VwoevY9gpX7KnXTR3QZD2Bxqz8PBliHp0tZTUN6fYTOZhGV4Hig84jGLZuuY6KQpK+bYrMGrY/NALc/fFcC0rV7T/p087f+dGyaW7KrwjyhT+70PIuBwnO+gpHYlE92nqSH9BFl44XvY1M0OgJIa2DKmwNgLVofm4HuQPiuhCRds+ekTze/acumpcc6d5XVQuC5oa2YgSmm4akLRq/55oiHLhokysMLQOdLm2IzKtJsy+ZCYjPI5Q/fBeCa3WW12vlbG4/ZXMiJlXhCQrm3Qcw26QsAlLX6A8mMZXg4ged6Hq4OMByBkGZ4ASgcCfS/rQZdLo9Ckr6COW8uGmPTmuMBp2IzA8CUXWW12vlbSu1rDl5YbM606kC1qU+BZZSG599vsw/azliGp6jEXa+4hchIiuEFoPAyoP/UGnS5LAokVsGUNxfAOrQ+NoOr/aEZAK7eVVqnnb+11L62jWPT3IbDbv1twzpdl2cxUHjOJRpPXLb6QDXdFErkx2uALk2xKbw0CkhfNsVmPVofmyEuf3iGBGnyzhO1uvlbS+3rDrkhx/Vpu8vqVHech1l43IHwNZuO1ih6QWqSRHgN0OVyYMDUGnS+NApIX8CUOxfABrQ+NkObtmwm7TgVm4NuROLyXgwbS0iorAvpsk36PAAVsr54KzELj4bnB+85Wcfq5Ukq+G9sptWg84gIIK2EKfcNAN+g9bEZ1iw22g+3lNrXH5I/NmdafaA6vU++5XKe5+YxHeQ8sQpPbpUvJMYStKI7aWO8Bii6HOh/WmzmojE2rakDD2BYtS90Nzhctf1449koJcSmuXWH3Gk/G9LxujyLgcLzE4avPehKZ/TaJNkI4qktGw86DY8C0opmWzatjc3F1f7Q3QAmbDvm1c7fWmbfcFhZsWlub7kPPMcNYD3H+WISHk8gPGxXWS2Fh7SeIAJFo4D+0zzofEkUkrS8KTbf4kJi4wvN5DhuwpZjNeL8raX2DYfdiMaVv2XeEI0jnpAsaNwdVPzATMITjiUGHq6uZ/HSRM0EESgaDQy43YNOw6KQsAymnDcAbETrY3NJlS90NwdM2HLMKy7YWmrfcEQdsTlTRV0I+RmGPADlrGc5Fybh0fBc8YkaCg85D4IW6NoUm45Do5CkpU1bNpvQ+tgMr/KFZnIcrth8tEa7YGuZ7RuVxqa5PSfrdIM6W3uDwnNWfDQupan9fzJpR4IW6DqmeWw+gynnTQCb0frYjDgVm00lNeKCraW2b454kEwnOL47WWcORmL90rSaL1jPci4swlNwsjbI4GWJoml038emYHAEEprHpjV1EHAqNsD4jSUeccG2Mtu3SRab5g5V+bnaYPTiNC3rRSfOjcWEPfaW++jCQdIUm7HAgNvdKBgUBbjPYMx+A8AWtD42lzbFZty3JR5xwdYy28aS5I1Nc4erAxB4rg/rOc6H7OFpiMT77Cv3meV+XaIQGh1QPK5xy6bDoDCAJTBm/wsXFpuRlXWh/+E5jPnmiEe7cFuZNVVi01x9JI6EJGVABWe2ZA9PbTAy7IgrQCsOphKNHigeK2HgHR7kD4wAWNwUm61ofWwua4rN6A1HPNqF20qtG0tqEE+x2JzJE4hweRaDFUAN61l+ivy7Why6ltaoanlY0hoaPVA8TsLA2z3IHxABuE+bYrMNFxCbKl9oFgeMWn/YrV24rcy66SjFpjmXPwwA2aDwnPGCPG/zBpP+eWWpSaMHuo2XMOB2D/L7RwDuk6bYbEfrYqNB05YNx2H0+sNuceG2Mutmis2PqvSFRABZAA6wnuWnyB6ehCTpUm3fO6mJBqB4fONuVF6/MIBTsdmB1sfm8qbYjFp3yC0u2lZm3XTUA/q2ObfKupAOjVs8iiZ7eGJxSZD7NUm7kDDgdh4Dpp0EuI9gzH4LwE60PjajKutCszgOl6096BIXbW/csqHYtEyVL2SIxRM5GkHZa+zJHR5tJJ5Q9leEnK9lMGYPAbAfrY/N6KbYjFx70KVduK0sY8sxis2F8NRHuNqGaJdMo7KvWJE7PDZvfUSZt/eSlooD2NfCvyMCGF1Z1zCL47hL1xx0aRdRbNqUJxBGJJboyHqOc5E7PJnuQJi2eFKLCGBMRV3DLJ7jRnztrNYu2n4yYyvFpl146iOQgDzWc5yL7OFx+cPKv56bXCgRwNim3ajhqw9UaxdtL8vYetwLiWLTrjyBCASOy2I9x7nIvqvlDoSVvfNJWutUbGajMTbiom1lGdtOUGzk1BCNQ+ChZz3HucgdHl0oRgeXk4gWwNiKuobZHLhLvjpQpV20/aRlO8WGmcbrmzjF71XIPaAQT0gUHnXTAhjXGBsMW7W/Wrdo+0nLjlKKjVJIyr5NCwCb8NB9WuqjBTCpoq5hNhpjo/1oe5llR2ktxUaBJAmK/xmTPTwx2uJRFW8wIrr84fUr9lYKi7aVWXaWUWxUgMJzhgSn8Nv1yel+NX+XNS5JFBt1Ufz/LbnDExMFTvFfFPI9uq9OfRS/uYPGtWjlFNMIPF25TEj7Uvy/FvKHh+coPIS0I45T/l6F3OEJGXWamMyvSUjKMOs1iCckP+s5zkXu8LizTDpaBYyQdmJJExGXJA/rOc5F7vC4sk26uMyvSUjKsKZpwQEu1nOci+zhsSt8nRBC1MyapoXAc5Ws5zgXucPjN+k1ajjbR4gqWQwi0rTCSdZznIvc4ZE0PE8HlwlpJ7Z0bcykF2mL5wcvyCPK0TYPIe0i06gLAaCDy2eKJ6Rai0GU+2UJSQlNZ40V/UwtgEF4JAnV9nQ6wExIeyjKSo8BOM56jnORPTyiwO8tzEyT+2UJSQn5FgMA0MHlM2WZdJsdOaaQ3K9LSLITBQ6iwAUBKP62JBZr4+zv28ESYPC6hCS1TrY0xBLSUdZznA8W4XF2zzUp/iY2QtSmKMsInYbfznqO88EiPEGjThNl8LqEJLVu2caQ3aij8PyYhCRVZJvozBYhbal3viUAwMl6jvPBJDwcuJ3dcowsXpqQpNUtx5gAcJD1HOeDSXjsRu3G7tkmunWCkDbCcUCGQYwDUPxaPACj8IgCv2toF1sti9cmJBl1yzYilpD2sp7jfLF61MyOfh0z6MwWIW1kaBd7zJqmXcJ6jvPFKjwxnuPKcsx0gJmQtjCqe5bXoBXWsJ7jfDF7uJ5e5JcOLbTRVg8hbaB3BzMA7GE9x/liFp6MNO2KUY5sL6vXJyRZ5Fn04IATAFSzrDDLxwlvGdrFppovFCFKNbizVdKLwnLWc7QEy/CEtBq+2ppGa/MQciFGds/yZqRpv2A9R0uwDA80PLdiSKGN5QiEqN6wxj2HLaznaAmm4bEbdUvH9cyh4zyEtFK+RQ+dRigDEGQ9S0swDQ+AdSO7Z9IVzIS00vjeuVGTXvMu6zlainV4IgB29s43Mx6DEHW6rn9+bbpO8zHrOVqKdXiQZdS9OfmifFoYjJAWMuo0yM8wBKCCNZbPxDw8GoFfOumiPFoKlZAWGtczOyEK/Ies52gN5uEB4BcFztktm5bJIKQlbhnayWNN177Deo7WUEJ4kGXSvXr9wALa3SLkPBl1GhRlpQcBHGA9S2soIjwanl98db+8BtZzEKIW43vlxDU8P4/1HK2liPAAqNfw/K6+HSys5yBEFe4e2aXGlq59nfUcraWU8CDXov/DzJFFdDEhIedQnG2EPV1XAuAY61laSzHhAbD6kq52v9mgYT0HIYo249IudVkm3bOs57gQSgqPpNPwr9w6pBOdWifkRxhEAWN7ZtcLPLeM9SwXQknhgdkgvnHHJYV+jmM9CSHKNKV/fkzD829DRWvvnI2iwgOgThS4VZd1y2I9ByGKdPfILl5buvb/WM9xoZQWHmSb9c/fM6qrm/UchChN3w4WmHTiHgCVrGe5UIoLD4DvCjPTKwusBtZzEKIosy4v8uZa9Ko+qHyKEsMDa5r22VmXdfWxnoMQpSiwGjCsi80FYDXrWdqCIsOj1fALJ/TJ9WbR89UJAQA8cqWjNiNN+0sASfFkFkWGB0DcrNc88svx3etYD0IIax1tBlzc1V4pCvxS1rO0FcVeracThYXjeuY8/3+WQ5byOvVc2iMcXgP+2EYAHCRLHmIDbwFCPohb3gMXqUcioyNig28D+DO+9OF6iJvfBuctRaLzEMT63dD49ngM4sY3gYY6xItGIFE0AgCg2TEf8S7DIWUUyPsJEtk9cmUPrz1d9xCSZGsHUO4WDwAkrGnir349waGeZ6w31EI4sg7R0Q8hOu4RQEqAL9sBzd7PEC++HJErngBEA/hjm374dwUNYj2vQqzvlNPezFcfQMJehOjYhyGc2AoA4OpOAlKCopMCOtnSMKzIViXw3ArWs7QlJYcHGoFffGlxVlVHm4rOcEkJIB4FEnEgFoWkN4N3HUYi//ViuqoAAAyUSURBVCIAQLzTEAgVZ3ngo0YHKbPoh1tCnADEI0AigVP/4An7liPW86p2/kSIEjw6weG1p+seRBJt7QAKDw8AyZaufeDxq3qq4+ZRQwbixaOgXf4MtMt+D4j6xq0SUQ/wAgBAMliAhvM/dJXI7g4uWANxzd8Q7zoSfMUeSBkdAAPdyZ/sOtvTMKSLrVLguZWsZ2lrij3Gc4rAcysHF1rLizLTrSXuetbj/LRIEHzFHkSufBIQDdBsfgd81QWu08QLiA25vfG/E3GIG+YgevFdEHZ/Cq7Bi0SnwUjk9bnw2Yni/P7q3l57uu4+JNnWDqD8LR4AkLJN+lkv3HBRDetBzoV3HYSUbgN0RoAXkMjvC77mGBANNe56AeAa6lq9tSKUbEC802Bw3uOAqEds6B0QDn3ddp8AUYyR3TITfTpYtgs8t4r1LO1BDeEBgA2FmWlfT+ybp+hncEkGK7ia40AsAkgS+OpDSJhykMgsBl++GwAgnNiCeGu2UCJB8JX7kOg0GFwsCpy6kzYRbcPPgCiBVuDx/HV9a7JMuumsZ2kvnCSpZisus7IutHfcX9ZkB8LK7Y+wfzn4sp0Ax0PK6IDYgJuBUB3ELe+CiwSRsBQgNngqIGjAV+wB5y1FvFfjgWLtime+3zoSDYiOmAXJnNv4cXd/gkReH0hZxUA8+v0p9i7Dkeg6kuWnTNrYA2O7Be8cXvgnW7r2KdaztBc1hQf+UPR/Pt1Z/qcnP9lDR1ZJUiqwGvDxPSOOZZl0DjQ+8DIpqWVXCwBg0otvXNk79zg9eZQkqxduuKjGlq6djiSODqCy8ABIZJl0U//ys/4enhYLI0lmTI/shCPHuEngua9Zz9Le1BYeANhjN2o/nHZx5zDrQQhpK2laAc9c08eTZdLPYD2LHNQYHmQadY/cN6abi9bsIcni+ev61pkNmicAVLCeRQ6qDA+Aelu69ubXpw2qoV0uonbje+XERxRnbjPpxTdYzyIXtYYHAs99k2fRv3X/2G4Kv5yZkB+XadTi2Wv7uLJMupuRhFco/xjVhgcA7EbdY9Mu7ny8f8cM1qMQ0mIcB7w2dZA3wyDeBSCl1hlXdXgAxDKNusmvTh3oogcBErW5Z1RxsEtW+jydKKj6GVmtofbwAMDRDIN47z9uG6iOO9gJATCwUwamjyg8mmnUPcB6FhaSITxI12kW9Mg1fzJzZFED61kIORd7uhZ/v22gK9OomwwgJW+2S4rwAECmSTd71uVFJSOK7QnWsxDyY3QaHu/OGFpjS9dOA3CM9TysJE14AEQyjbqxL988oKI428h6FkLO6pVbB9R1yDA8rReFpFvcqyWSKTwAUJVl0l3xzvShrkyjlvUshJzmV1d0rx/U2bowI037N9azsJZs4QGAfdlm3W3vzRhWoxeT8dMjajSlX3701qGddmQadbNYz6IESfmTKQr8l/kZhifmTBtUy9GVzYSxAR0z8Nurex3PNOomAoiznkcJkjI8AGAxiK/37mB59zeTevlZz0JSV4HVgNemDarKNOrGAqDvxSZJGx4AyDTqHprSP3/Dz4cXqueJgCRp5Jr1+M/Mi925Fv3VAE6wnkdJkjo8ABKZRt21vxhTvPWOSzpTfIhscsw6LJh9iSc/w3ANgC2s51GaZA8PAIQzjbpx94/ttuXnwwvpAkPS7rJNOiyYPdyTn2G4VuC5b1jPo0SpEB6gMT7jfzGmeMt0ig9pR1kmHRbOvsSTa9bfIPDcetbzKFWqhAdojM8V944p3jzj0i4UH9LmMo3axuhYDDdpNfwa1vMoWSqFB2iKz/+O6rrp7pEUH9J27OlaLGzcvbpZq+FXs55H6VT1eJs2pHUHwsvf2nBs2KurD6exHoaoW5fMdLx711B3lkl3q14UvmQ9jxqkangAQHQHwh+sPei68pGFu82xRMp+HcgFGFJolV69bWBFtll/FYDdrOdRi1QODwBwnkD4t8c8wQemv7XZ6gsp9wmlRHmuHdAh8uSknkczjboxAMpZz6MmqR4eAEB9OHaTyx9+7fZ/bbKX1tChH3JuD43vXj91WKftTbdBBFjPozYUnu8NqvKFltzzwfbcbce9dIcXOStR4PDXm/vXXVxk/zTTqLsLdO9Vq1B4TlfgDoRXPff5/sKPd5ykdTXIaWzpWvzrzsE1ne3pL1rTtS+wnkfNKDw/ZHT7w4tX7Ksc9NTifeZInBY0JI0HkV+5dYDLlq6drtMIS1nPo3YUnrPjvPWRR12B8MN3v7PVfqImyHoewgjHAb8YXVx/5/DCkqbjOWWsZ0oGFJ6fNtjlD3/87Of7cj7dWS6yHobIK8ukw2tTB9YUZqZ/2PQ0iJRcmL09UHjOzeLyh9/bfsI78tcLdmXQKffUML5XTvy5a/u4rOnaO0WBT+n1kdsDhec8BcKxqb6G6F9/OX9n5saSGjrrlaRMOg1+P6V33eWOrB2ZRt1NSLEnfMqFwtMyBS5/eNG6Q67uTy3Zl1HXQFveyWTyRXmxJyf1qjHqNU8YdZo3kULPMpcbhafluGAkdmsgFPvzSysP2hZsK9XSl1DdOtoM+PNN/Wu6ZKavzjLpZgHwsJ4p2aV0eBwOx0wA0wFEANzldDpLWvDXzS5/+K8uf/iaX87faT9QScvpqo0ocLhnVHHw9os7V2WadHcCWMd6plSRsuFxOBw2AMsAjAAwAMCvnU7nz1rxofq5/OH3l++t7PTHZQfMgTAdfFaDIYVW6aWb+nlMevE1W7r2WTT+40NkksrhmQBgtNPpfLTp97ucTme/Vn443h+KzqwPx5/+yxcHrYu2l4lxuttdkRw5Jvxmcq+a7rnGfdkm/R0AjrKeKRWl2kJgzdkAeJv9/kK+FgmTXpyTa9H3fGSC47W1vx7tunFQQVTg6eSXUnTJTMcbdwyueW/G0O2XdsucnG3SjwRFh5lUDo8XQEaz37fFzX41mUbdAx2shl6PXdXjn2t+Pcp93YAOMeoPOwVWA/5+6wDv/FkX7x3XK+fGbLN+EIBvWc+V6lJ5V8sG4HMAlwLoB+Bxp9N5Uxu/TJbbH366IRq/8aWVTuuSXeUC7YHJI9esx8NXdq+9vHu2KyNNfEAU+OWg0+OKkbLhAQCHwzEbwB1ovBR+htPpPNxOL5Xj8oefCUXj172xrsS8aPtJLR2Ebh9DCq24d3Sxp1e+2ZNh0D6u1fAfg4KjOCkdHgYy6xqisyOxxOx1h1xpc9eVWPdX0Gn4C2UQBVw/sENk5sgin0ErbMwx658BsJn1XOTHUXjY4AGMq6wL/aa2IeL459oS2+e7K4RwjJbgaIlCexpmjiyqG987p17k+Tes6dq/A3CxnoucG4WHvQJPIPxgXJKmLfuu0rBgW6l5z0kf65kUy2IQMbFvbuy2YZ292SZdqT1d+4xG4JeAVgJUFQqPcoiJhDSxyh+6JyFhwLLvKvQf7zhp2ltOEbIYRIzrmR2/ZWinms62NJ9eFN4yG8T3AJxgPRtpHQqPMhkSCWlClT/0vwD6rzvo1izeVW7ddNSDaDw1/n/lWfS4ondu9IaBHWpzzfo6UcPPs6Zp3wVwiPVs5MJReJRPC2BklS90B8dh3Elvg7ja6TJuLPEYdpXWIlmOC3W0GTCsiz0xtkd2Tb+OGRLPcSeMes0HRp1mIYBS1vORtkXhUZ+OCUm6tMoXukbguItrG6JpGw67desOuc3bjnuhhqU6eK7xSuJhRfbYGEe2t08HiyRBKknXaZaY9eJKADsB0PUGSYzCo35WAMOr/aGJkoQxiYRkr/CFpP3lPu2+Cp/5cHWAP+IKwB2Q/x5IUeDQ2Z6O4mwjeuWZg30LLPVdM9OhF4VQLCEdyTCIn6XpNF8C+A5Acmy6kfNC4Uk+HIA8AD3CsXjPmvrIMAB9eI7LCYRj4lF3Pap9IY3LH9a5AhG9tz7Ce4MR1Aaj8AYj8AYjCEXP3gCOA0Seh1bDIyNNhD1dC7tRB3u6FlkmXSjHrA/lmPXRbLNOyjbpOK3AB2MJ6ZBeFLbY0rXbAOwDcBi0dnHKo/CkljQAXQBkArAnJMnua4gWhKKJ/IQk5QLI0vCcjeM4HQBIkDhIADhwHLgEICUkCfGEhGhCkjwAKjQCd9KsF4/rRaESQDUar6NxNf03neImZ0XhIYTILpXvTieEMELhIYTIjsJDCJEdhYcQIjsKDyFEdhQeQojsKDyEENlReAghsqPwEEJkR+EhhMiOwkMIkR2FhxAiOwoPIUR2FB5CiOwoPIQQ2VF4CCGyo/AQQmRH4SGEyI7CQwiRHYWHECI7Cg8hRHYUHkKI7Cg8hBDZUXgIIbL7/6zn4hbOVwzRAAAAAElFTkSuQmCC\n",
      "text/plain": [
       "<Figure size 360x360 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.figure(figsize=(5, 5))\n",
    "cnt_click = train_df.click.value_counts()\n",
    "plt.pie(x=cnt_click, labels=[0, 1], autopct=\"%1.1f%%\", explode=[0.1, 0], startangle=90\n",
    "        )\n",
    "\n",
    "plt.title(\"Click\")\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "结论:样布不均衡,正负样本1:4,少数类为点击，希望捕获少数类。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 广告长宽与点击情况"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 106,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "sns.stripplot(x=\"click\", y=\"creative_height\", data=train_df)\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 107,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "sns.stripplot(train_df.click, train_df.creative_width)\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "结论:人们趋向于点击广告大小适中的广告，长宽在500以下比较集中"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 探索布尔型变量对结果的影响"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 108,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "creative_is_jump\n",
      "creative_is_download\n",
      "creative_is_js\n",
      "creative_is_voicead\n",
      "creative_has_deeplink\n",
      "app_paid\n"
     ]
    }
   ],
   "source": [
    "# 打印bool类型数据\n",
    "bool_feture = []\n",
    "cols = data.columns\n",
    "\n",
    "for col in cols:\n",
    "    if str(train_df[col].dtype) == 'bool':\n",
    "        print(col)\n",
    "        bool_feture.append(str(col))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 109,
   "metadata": {},
   "outputs": [],
   "source": [
    "def plot_ratio(df, name1, name2):\n",
    "\n",
    "    gropy_n = df.groupby([name1, name2])[name1].count().unstack()\n",
    "    print(gropy_n)\n",
    "    print()\n",
    "    gropy_n[[0, 1]].plot(kind=\"bar\")\n",
    "    plt.xlabel(name1)\n",
    "    plt.ylabel(name2 + \"_\" + \"counts\")\n",
    "    plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 110,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "click                      0       1\n",
      "creative_is_voicead                 \n",
      "False                2397237  595402\n",
      "\n"
     ]
    },
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAYIAAAEfCAYAAABMAsEUAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4yLjIsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy+WH4yJAAAXUklEQVR4nO3de5RdZZnn8W8lVZDEUMmE6Qg0aRpXm8cAAhomDcogw8WlQgO2XMJgqyA0tKIIMzAzooKNXJbSIDej3att7DQNSehwGWlxBhSXwgCxaDomhAfozmTAQJyYFAlDLlWk5o+zk3WoVKrqpM6pU1X7+1mrVp29333e/aRW5fzqffetpaenB0lSeY1rdgGSpOYyCCSp5AwCSSo5g0CSSs4gkKSSMwgkqeRam13A7oiINuAx4GDg/My8t59tTwIuA8YDf52Z84elSEkaJUZlEADdwOnAhf1tFBG/A5wLfDgz3xqOwiRptBmVQZCZPcCrEbFjXUQcBtxE5S//BC4CPga8AfwoIjYDF2fm/xn+iiVp5BpLxwi+DZyTmcdS+fD/MLAfMINKINwKfKtp1UnSCDUqRwS7cAhwTzFKmAwsA9YDP8nMbuCRiLipifVJ0og0loLgV8CZmbkWdhxQ/gPgG8Xy4cCq5pUnSSNTy2i96VxELASOoDIN9DBwF3AjlXDbBnwxM5dHxFeAE6lMg12Ymc81qWRJGpFGbRBIkuqjoVNDEXEUlTN5tlL5y/2czOysav8X4OVi8c7MvLOR9UiSdtboYwSrgOMz882IuAj4PHBtVfum4iwfSVKTNDQIMnN11eJWKheCVdsjIh4DXge+lJkrB+qzo6PDuSxJ2g2zZ89u6Wv9sJw1FBF7A58DPtKr6QOZuTYijge+A3x0MP3Nnj27zhVK9bFixQpmzZrV7DKknXR0dOyyreEHiyNiEvBD4CuZ+UQ/2y3LzEMG6q+jo6Nn0qRJ9SxRqpvNmzczYcKEZpch7eTNN99szoggIlqBe4DbeodAROwJtGTm5og4BPjtYPv1Ly6NVI4INFL1NyJo9NTQ2cAxQHtEXAI8ROVeQPcBG4GHImJjse3FDa5Fkupu27ZtrF69mq6urmaXskNbWxv77bcf48YN7i5CjT5YPB/o77bP72vk/iWp0VavXk17ezvt7e3NLmWHDRs2sHr1avbff/9BbT+WbjonScOuq6trRIUAQHt7e00jFINAkkrOIJCkJjjuuOPYsmULa9as4Yorrtjldq+88gpnnnlmQ2sxCCSpid75znfyzW9+s6k1jKXbUGs3dL65lS3d25pdxpgxdfp+zS5BI9TChQuZP38+LS0tnHDCCTvWv/LKK1x22WUsXLiQrq4urr/+epYsWQLApZdeysyZM3dsu3z5cq666ipuv/129tlnn7rVZhCU3JbubfzhdY82u4wx4/HLP9TsEjQCPf/889x1113cfffdTJ48mc7OTu6///6dtluwYAGbNm3iwQcfBCpn/2zcWDnDfvny5Xz1q1/ljjvuqGsIgFNDktRwTz/9NCeddBKTJ08GYOrUqX1u9+STT3LWWWfR0tJCS0sLU6ZMAeC1117j8ssv57bbbmPfffete30GgSSNcFOmTGHKlCksX768If0bBJLUYEceeSQPPfQQb7zxBgCdnZ19bnfUUUexYMECenp66OnpYcOGDQBMnDiRefPmMW/ePJ566qm612cQSFKDzZw5k09+8pPMnTuXU045hfnz+77hwllnncXEiRM5+eSTOfXUU3nmmWd2tE2dOpV58+bxjW98g+eeq+8Td0fdoyo7Ojp6vA11/azZsNmDxXX0+OUf4nf3ntzsMjSMVq5cyYEHHtjsMnbSu66Ojo5d3n3UEYEklZxBIEklZxBIUskZBJJUcgaBJJWcQSBJJee9hiSpjupxI8c9W8cxddIe/W6zcOFCFi9eTFtbG9dddx0zZszY7f0ZBJJUR/W4keNTXz6+3/bOzk4WLVrE3XffzXPPPceNN97ILbfcstv7c2pIkkaZpUuXMmfOHFpbWzn00ENZuXLlkPozCCRplHn99dd33JkUYKh3iDAIJGmUaW9v33FDOoBx44b2UW4QSNIoc9hhh7FkyRLeeustli9fzgEHHDCk/jxYLEl1tGfruAEP9g6mj/5MnTqV0047jXPOOYfW1lauvfbaIe3PIJCkOhrotM96Ofvsszn77LPr0pdTQ5JUcgaBJJWcQSBJJWcQSFLJGQSSVHIGgSSNQl1dXcydO5cjjjiChx9+eEh9efqoJNXTm+uge8vQ+mjdEyZN63+T1lZuvfVWFixYMLR9YRBIUn11b4Gb3jO0Pi57fsBNWlpamD59+tD2U3BqSJJKziCQpJJr6NRQRBwF3ARsBd4AzsnMzqr2k4ErgR7gksxc0sh6JEk7a/QxglXA8Zn5ZkRcBHweuBYgIsYD1wDHAO3AAuDoBtcjSWPGJZdcwrJly5g0aRJLly7liiuu2K1+GhoEmbm6anEr0F21/G7ghczcCGyMiLaImJCZmxtZkyQ1VOuegzrYO2AfgzCUx1O+bXd16WUAEbE38DngI1WrpwHrq5Y7i3XV4SFJo8sAp32ORA0PgoiYBCwCvpiZa6ua1gNTq5anAOsG0+eKFSvqV2DJtU+f0ewSxpQeevz9LJmenh42bdrU7DJ2smnTpkH/Ljb6YHErcA9wW2Y+0av5RWBmRLwD2AvoHuy00KxZs+pbaImt2eBMXD210OLvZ8msXLmSiRMnNruMnUycOJEDDzxwx3JHR8cut230iOBsioPBEXEJ8BAwHrgvMzMirgYeoXLW0KUNrkWS6q6np4euri7a2tqaXcoOXV1dNT3QvtEHi+cD8/tpfxB4sJE1SFIjTZ8+ndWrV7Nt27Zml7LDuHHjarrq2FtMSNIQTJ48mcmTJze7jCHxymJJKjmDQJJKziCQpJIzCCSp5AwCSSo5g0CSSs4gkKSSMwgkqeQMAkkqOYNAkkrOIJCkkjMIJKnkDAJJKjmDQJJKziCQpJIzCCSp5AwCSSo5g0CSSs4gkKSSMwgkqeQMAkkqOYNAkkrOIJCkkjMIJKnkDAJJKjmDQJJKziCQpJIzCCSp5AwCSSo5g0CSSs4gkKSS260giIhxETGl3sVIkobfoIMgIhZExF4RsRewDFgSEV9uXGmSpOFQy4hgZmZuBE4HHgDeA8xtSFWSpGFTSxDsEREHAP8ReCAztzWoJknSMGqtYds/B/478IvMfDIiDgRe6u8NEdEGPAYcDJyfmff2av8X4OVi8c7MvLOGeiRJdVBLEIzLzEO3L2TmyohYNMB7uqlMJV24i/ZNmXlsDTVIkuqslqmhywe5bofM7MnMV/vZZI+IeCwiHihGGJKkYTbgiCAiPkHlr/oDIuLvq5ragfVD3P8HMnNtRBwPfAf46GDetGLFiiHuVtu1T5/R7BLGlB56/P3UqDOYqaFfAr8FZgDfq1q/EVg6lJ1n5tri+6MRcctg3zdr1qyh7FZV1mzY3OwSxpQWWvz91IjU0dGxy7YBgyAzVwGrgKMBImI8ML5o3u0rkyNiT6AlMzdHxCFUwkaSNMwGfbA4Iv6EyplDLcC24nsP8K4B3rcQOAJ4IyLmAOuA+6iMKB6KiI3FphfXXL0kachqOWvoa8CRmbmmlh1k5pn9NL+vlr4kSfVXy9TOKqCzUYVIkpqjlhHB/wWejohHgC3bV2am9xuSpFGsliB4uPiSJI0hgw6CzPxBIwuRJDVHLWcNvUrlLKG3ycz96lqRJGlY1TIi2Hf764jYAzgVOKgRRUmShs9uXRCWmVszcxHw8TrXI0kaZrVMDf1p1eI4KtcADPVeQ5KkJqvlrKF9q16/BfwCuKy+5UiShlstxwi+3shCJEnNUcvU0B8A86g8qxjgOeDzmdnvU8okSSNbLQeL/wa4KTNnZOYM4OZinSRpFKslCKZk5o+2L2Tmw1QeTiNJGsVqOVi8LCK+DfxdsXwWsLz+JUmShlMtI4LPAr8Griy+flOskySNYrWMCKYBt2XmtwAiYkKxblMjCpMkDY9aRgT38/Z7DfUU6yRJo1gtQdCWmdXPIdgC7Fn/kiRJw6mWIHileG4xABHxaeCV+pckSRpOtRwjuAC4NSKupzIt9DgeLJakUa+WW0y8Cpyxq/aIuDgzb69LVZKkYbNbt6HehfPq2JckaZjUMwha6tiXJGmY1DMIdnqMpSRp5HNEIEklN+ggiIidHlIfEYdVLd5Sl4okScOqlhHB4uowiIgPAX+7fTkz76xjXZKkYVLLdQSfA+6PiE8ARwBfAT7WkKokScNm0COCzHwGuBD4EXApcHxm/rpRhUmShseAI4KI+F+8/YygKVQeXv+PEUFmfqBRxUmSGm8wU0NzG16FJKlpBpwaysxVmbkKOATorFruBA5qdIGSpMaq5ayhazPz9e0Lxevr6l+SJGk41RIEfW3bVq9CJEnNUcvpoz+LiL8GvlcsXwj8tP4lSZKGUy1BcCmVD///Uiw/Avxlf2+IiDbgMeBg4PzMvLdX+8nAlVTOSrokM5fUUI8kqQ5qeR5BN3BH8TVY3cDpVALkbSJiPHANcAzQDiwAjq6hb0lSHQzmOoI7M/MzfVxPANDvdQSZ2QO8GhF9Nb8beCEzNwIbI6ItIiZk5ubBly9JGqrBjAj+W/G93tcTTAPWVy13FutWD/TGFStW1LmU8mqfPqPZJYwpPfT4+6lRZzBB8NuI2AN4tc77Xg9MrVqeAqwbzBtnzZpV51LKa80GB2D11EKLv58akTo6OnbZNpggSPp+6ExLsf5du1cWLwIzI+IdwF5At9NCkjT8BgyCzDwQICKuBm7JzPXF8jTgCwO9PyIWUrlb6RsRMYfKX/33ZWYWfT5CJVAu3c1/gyRpCGo5ffTUzLx6+0JmrouI04Cv9/emzDyzn7YHgQdrqEGSVGe1XFk8vpjGASAi9qK2IJEkjUC1fJDfBvw8Iu4plucCN9e/JEnScKrlwTR/BXwa2FR8/Ulmfr9RhUmShkdNUzuZ+SvgVw2qRZLUBLUcI5AkjUEGgSSVnEEgSSVnEEhSyRkEklRyBoEklZxBIEklZxBIUskZBJJUcgaBJJWcQSBJJWcQSFLJGQSSVHIGgSSVnEEgSSVnEEhSyRkEklRyBoEklZxBIEklZxBIUskZBJJUcgaBJJWcQSBJJWcQSFLJGQSSVHIGgSSVXGuzC5DGkt9p2wwbNja7jLGhdU+YNK3ZVZSCQSDV0fierXDzrGaXMTZc9nyzKygNp4YkqeQMAkkqOYNAkkqu4ccIIuIC4FxgK3BeZv5rVdtjQBvQBTycmTc0uh5J0ts1NAgiYhpwPvBB4H3ADcCZvTY7NTPXNrIOSdKuNXpqaA7wWGZ2Z+YSIHq19wD3RcSPI+LwBtciSepDo6eGpgHrq5Z7B88Zmbk2Ig4G/o7KqGFAK1asqFN5ap8+o9klSH3q6u7mJf+vD4tGB8F64NCq5beqG7dPCWXm8ojoioiJmblpoE5nzfI87XpZs2Fzs0uQ+tTW2ur/9Trq6OjYZVujp4aeAj4UEeMj4v3Ai9WNEdFefN8HeMdgQkCSVF8NHRFk5rqI+AHwcypnBn02Ij4DrCzW/TQi3izq+EIja5Ek9a3hp49m5neB71ateqnq9exG71+S1D8vKJOkkjMIJKnkDAJJKjmDQJJKziCQpJIzCCSp5AwCSSo5g0CSSs4gkKSSMwgkqeQMAkkqOYNAkkrOIJCkkjMIJKnkDAJJKjmDQJJKziCQpJIzCCSp5AwCSSo5g0CSSs4gkKSSMwgkqeQMAkkqOYNAkkrOIJCkkjMIJKnkDAJJKjmDQJJKziCQpJIzCCSp5AwCSSo5g0CSSs4gkKSSMwgkqeQMAkkqudZG7yAiLgDOBbYC52Xmv1a1/TvgFqAFuDYzf9joeiRJb9fQEUFETAPOB44BLgdu6LXJzcAZwInANRExvpH1SJJ21uipoTnAY5nZnZlLgNjeEBETgNbM/HVmvgG8ALy7wfVIknpp9NTQNGB91fK4Xm2dVcudxboBdXR0DL0y7fAPZ+zT7BLGjGdfehX+6CfNLmNseHE1sLrZVZRCo4NgPXBo1fJbvdqmVi1PAdYN1OHs2bNb6lOaJAkaHwRPAV8r5v4PA17c3pCZmyKiOyL2BTZQmRZ6qcH1SJJ6aenp6WnoDiLiIuBTQBfwWeBoYGVm/iwi/pDKAeMW4PrMfLChxUiSdtLwIJAkjWxeUCZJJWcQSFLJGQSSVHIGgSSVnEEgSSVnEEhSyTX87qPSWBcRewP/Cfg3wBeA0zPznuZWJQ2eIwJp6H4APAEcnJndwAVNrkeqiUEgDd2E4lka3cWyV2lqVDEIpKFbHxEnA20RcSLw22YXJNXCIJCG7gIq99B6HTgBuLC55Ui1MQikoduSmf8VOA34n7z9duvSiGcQSEO3/VnbVwNnAZ4xpFHFIJDq5/cy8wJgUrMLkWphEEhD1xIR3waeL5a9Pkejir+w0tD9MfA+4LGImAB8ucn1SDUxCKTdFBF/3GvVx5tSiDREBoG0+97bT9viYatCGiIfVSlJJeeIQBqiiJhD5dTR3wVaADLz0GbWJNXCs4akobsN+BKwDjgDuL+55Ui1MQikoft/mfkCMD4zE/hAswuSamEQSLspIj5VvHw5It4L/DIiFuOUq0YZg0DafZ8ByMxPA7cA/xm4BvhYE2uSauZfLlKdZOY24J+aXYdUK08flXZTRKyl8mSyFuCoqtc9mXlKM2uTauGIQNp9s5tdgFQPjggkqeQ8WCxJJWcQSFLJGQSSVHIGgca8iPj9iDi9avmi6uUh9n1ERNxQj7762ccjDez7nog4tlH9a3TwrCGNOhExPjNreUD87wOnA/cCZOZ361VLZv4S+GW9+tvFPk5oZP+SQaARKSIuAL4IbKNyE7dPA3cDHwUujoiZwJ8BewCLM/PrEdFebDuVyvn8X8jMXwDXAgdFxLPAt4B3A69ROe//5sw8vtjnx4DTM/O8iDgJ+CowAXgS+FxxwVjvOo8FLsrMuRExF/ga0AW8kJln9LH9NOCJzHxPsXwQcHtmHlfs/wYqI/V7M/PqYpvXMnOf4vVVVG5stw24IzO/t6taI+KHwL7Fz+iqzFxc9HENcCawqvg5qeScGtKIExGHAp8HPpiZh1G5fQPA/87Mw6nc5fMjwJFUHhE5OyKOADYBp2bm+4E/Av6ieN+VwI8z8/DMvGv7fjJzKbBPRPzbYtUZwL3F8peAY4v9vUXlcZQDuRI4qaj5/L42yMx1wKqIOLzXPicC3wFOKv5NJ0bE0b1+LicDHwTeX9zmetEAtX4qM2cX77kmIlqKW2afCBwCnFv8DFVyBoFGomOBezJzA+z48ARYVHw/nsqVvB3AM8BBVP7KbwG+GRG/An4IHDyIfd0HnBYRrcAxwCNF34cCTxajiBOAdw2ir8eBv4qI84D+LtBZRGWqCiqPt1wMBPBcZr6cmV3AAiof4NWOA76fmVthx8+lv1ovjYh/Bn5OZXpsHyp3Rl2cmV2Z+euiTSXn1JBGkzeL7y3AvMy8rroxIs6lMg1yeGa+FRFvDKLPe4HrgZeBxzNza0S0AA9k5p/WWN+fUflgPgV4KiLem5ndfWx3P/DTiJgPvJ6Zr0XEPjXua7s+a42I/wDMAeZk5paIWAbsWTRXh5RXlMoRgUaknwBzizn/7fPqfbVPLdr3j4i9gXbgN0UInA68o9h+I7BXXzvKzGeB3wMuoDiYTGWe/fiI2L/of+/trwdwYGY+AXwZaOtnn2upHKO4GviH7auBWRGxXzE6OYPKCKPaI8B5EbFHUde0fmptB9YVITAHmFX08QTw8Yhoi4j9gH8/iH+XxjiDQCNOZi4DbgeeKKY2vthH+43AzyJiKbCQyof+3wPHFeuOAdYUb1kKTIyIZyPinD52+QDwYeDHRf+/oXKM4oGir/8BTB9E6X9RTEstBX6Qmev72XYRcBZFEGTmpmKfPwKeBR4tDnRX/7v/EfgF8E/Fz+UT/dT6Y2DviFgOXAr8c9HH08CjwDLgb6gEiUrOew1JUsk5IpCkkvNgsTQIxTGIR3utXtvfxV7FwetLeq3+fmbeWu/6pKFwakiSSs6pIUkqOYNAkkrOIJCkkjMIJKnkDAJJKrn/D012XF5D/F5yAAAAAElFTkSuQmCC\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "#  是否是语音广告\n",
    "plot_ratio(train_df, \"creative_is_voicead\", \"click\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 111,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "click                 0       1\n",
      "creative_is_js                 \n",
      "False           2397237  595402\n",
      "\n"
     ]
    },
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAYIAAAEfCAYAAABMAsEUAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4yLjIsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy+WH4yJAAAWW0lEQVR4nO3df5TddX3n8eckM5DEMMmGbQRKZOMpeTeCARuWgnWRY9CjQIG2/AiLrYJQqKIIu9Bd8QdWfniUghBs2u1pFzZFSGD5VVlxizaeCgvGYdlICG+gZrNiMG5MhoTNr5lk9o97k3OZJDP3ztzv3Jn5Ph/nzJn5fD/fH+9wLvOaz+f7q62vrw9JUnlNaHUBkqTWMggkqeQMAkkqOYNAkkrOIJCkkjMIJKnk2ltdwFBERAewHDgGuDQzHxxg3TOAa4CJwN9k5pIRKVKSxogxGQRAL3AucPlAK0XErwEXAx/KzF0jUZgkjTVjMggysw94PSL2LouI44DbqPzln8AVwOnAm8B3ImI7cGVm/p+Rr1iSRq/xdI7gG8BFmXkqlV/+HwKOAGZRCYQ7ga+3rDpJGqXG5IjgAI4F7q+OEqYCLwCbgO9nZi/wZETc1sL6JGlUGk9B8BPg/MzcAHtPKP8GcGO1fTywtnXlSdLo1DZWHzoXEcuAE6hMAz0B3AvcSiXcdgOfycxVEfF54INUpsEuz8wXW1SyJI1KYzYIJEnNUejUUEScTOVKnp1U/nK/KDO7a/r/GfhZtXl3Zt5dZD2SpH0VfY5gLbAgM7dGxBXAp4Cbavq3Va/ykSS1SKFBkJnrapo7qdwIVuugiFgOvAF8NjPXDLbPrq4u57IkaQjmz5/ftr/lI3LVUEQcCnwS+HC/rvdm5oaIWAD8BfCRevY3f/78JlcoNcfq1auZO3duq8uQ9tHV1XXAvsJPFkfEFODbwOcz8+kB1nshM48dbH9dXV19U6ZMaWaJUtNs376dSZMmtboMaR9bt25tzYggItqB+4FF/UMgIg4G2jJze0QcC/yq3v36F5dGK0cEGq0GGhEUPTV0IXAK0BkRVwGPU3kW0MPAFuDxiNhSXffKgmuRpKbbvXs369ato6enp9Wl7NXR0cERRxzBhAn1PUWo6JPFS4CBHvv8niKPL0lFW7duHZ2dnXR2dra6lL02b97MunXrOPLII+tafzw9dE6SRlxPT8+oCgGAzs7OhkYoBoEklZxBIEkt8IEPfIAdO3awfv16rrvuugOu99prr3H++ecXWotBIEkt9Pa3v52vfe1rLa1hPD2GWkPQvXUnO3p3t7qMcWP6zCNaXYJGqWXLlrFkyRLa2to47bTT9i5/7bXXuOaaa1i2bBk9PT3ccsstrFixAoCrr76aOXPm7F131apVfOlLX+Kuu+7isMMOa1ptBkHJ7ejdzW/f/L1WlzFuPHXt+1tdgkahl156iXvvvZf77ruPqVOn0t3dzSOPPLLPekuXLmXbtm089thjQOXqny1bKlfYr1q1ii984Qt885vfbGoIgFNDklS4H/3oR5xxxhlMnToVgOnTp+93vWeeeYYLLriAtrY22tramDZtGgC/+MUvuPbaa1m0aBGHH3540+szCCRplJs2bRrTpk1j1apVhezfIJCkgp100kk8/vjjvPnmmwB0d3fvd72TTz6ZpUuX0tfXR19fH5s3bwZg8uTJLF68mMWLF/Pss882vT6DQJIKNmfOHD760Y+ycOFCzjrrLJYs2f8DFy644AImT57MmWeeydlnn81zzz23t2/69OksXryYG2+8kRdfbO4bd8fcqyq7urr6fAx186zfvN2TxU301LXv59cPndrqMjSC1qxZw+zZs1tdxj7619XV1XXAp486IpCkkjMIJKnkDAJJKjmDQJJKziCQpJIzCCSp5HzWkCQ1UTMe5Hhw+wSmTzlowHWWLVvGQw89REdHBzfffDOzZs0a8vEMAklqomY8yPHZzy0YsL+7u5sHHniA++67jxdffJFbb72VO+64Y8jHc2pIksaYlStXcuKJJ9Le3s68efNYs2bNsPZnEEjSGPPGG2/sfTIpwHCfEGEQSNIY09nZufeBdAATJgzvV7lBIEljzHHHHceKFSvYtWsXq1at4qijjhrW/jxZLElNdHD7hEFP9tazj4FMnz6dc845h4suuoj29nZuuummYR3PIJCkJhrsss9mufDCC7nwwgubsi+nhiSp5AwCSSo5g0CSSs4gkKSSMwgkqeQMAkkag3p6eli4cCEnnHACTzzxxLD25eWjktRMWzdC747h7aP9YJgyY+BV2tu58847Wbp06fCOhUEgSc3VuwNu+83h7eOalwZdpa2tjZkzZw7vOFVODUlSyRkEklRyhU4NRcTJwG3ATuBN4KLM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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "#  是否是js素材\n",
    "plot_ratio(train_df, \"creative_is_js\", \"click\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 112,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "click           0       1\n",
      "app_paid                 \n",
      "False     2397237  595402\n",
      "\n"
     ]
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "#  app是否收费\n",
    "plot_ratio(train_df, \"app_paid\", \"click\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 113,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "click                   0       1\n",
      "creative_is_jump                 \n",
      "False               56805     690\n",
      "True              2340432  594712\n",
      "\n"
     ]
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "#  是否落地页跳转\n",
    "plot_ratio(train_df, \"creative_is_jump\", \"click\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 114,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "click                       0       1\n",
      "creative_is_download                 \n",
      "False                 2340432  594712\n",
      "True                    56805     690\n",
      "\n"
     ]
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "#  是否落地页下载\n",
    "plot_ratio(train_df, \"creative_is_download\", \"click\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 115,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "click                        0       1\n",
      "creative_has_deeplink                 \n",
      "False                  2396401  595348\n",
      "True                       836      54\n",
      "\n"
     ]
    },
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAYIAAAEfCAYAAABMAsEUAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4yLjIsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy+WH4yJAAAY2UlEQVR4nO3de5hcdZ3n8XcnHXIxdGIYIzBkkBnlaxRBJ5gRZZEFdVVQmBG5LF4RBlZRBmZhXS+jjgI+6oiITnR9nMFFhATkNoPiPKi4oyyYaXUiofkKY5YVg7iYhIQlHTqk9486nS2S9KXSdbq683u/nidP1++cU+d8qyjqU7/fuXUNDg4iSSrXtE4XIEnqLINAkgpnEEhS4QwCSSqcQSBJhTMIJKlw3Z0uYHdExAzgDuCFwJmZef0Iyx4HXABMB76amVdNSJGSNEVMySAAtgInAWePtFBEPAt4J/CazHxqIgqTpKlmSgZBZg4CD0fE9mkRcRjwWRq//BM4B3g98Djw7YjoB87NzP898RVL0uS1J+0j+BxwemYeTePL/zXA/sAiGoHweeDTHatOkiapKdkjGMYhwLVVL2EucA+wHvheZm4Fbo+Iz3awPkmalPakIPg5cHJmPgrbdyg/F/hE1X4x8GDnypOkyalrql50LiJWAIfTGAa6Dbga+AyNcNsGvC8zV0fEh4BX0xgGOzsz7+1QyZI0KU3ZIJAktUetQ0MRcQSNI3mepPHL/fTM3NA0/9+AX1XNKzPzyjrrkSTtrO59BA8Cx2bmExFxDvAe4OKm+Zuro3wkSR1SaxBk5tqm5pM0TgRrtldE3AE8BvxFZq4ZbZ29vb2OZUnSbliyZEnXrqZPyFFDEbEP8G7gtTvMenlmPhoRxwJ/C7xuLOubM2dOmyssV39/P7Nmzep0GdJO/Gy21xNPPDHsvNqDICLmANfROIrn0eZ5Q+3M/G5EXD7WdS5evLi9RRasr6/P91OTkp/N9urt7R12Xq1nFkdEN3AtcEVm3rnDvJkRMat6fAjwuzprkSTtWt09gtOAo4CeiDgPuJXGtYBuBDYBt0bEpmrZc2uuRZLabtu2baxdu5aBgYFOl7LdjBkz2H///Zk2bWy/9eveWXwVMNJln19S5/YlqW5r166lp6eHnp6eTpey3caNG1m7di0HHHDAmJbfky46J0kTbmBgYFKFAEBPT09LPRSDQJIKZxBIUgccc8wxbNmyhUceeYSLLrpo2OUeeughTj755FprMQgkqYOe/exn86lPfaqjNexJl6GeVDY88SRbtm7rdBmjmr9w/06XIBVhxYoVXHXVVXR1dfGqV71q+/SHHnqICy64gBUrVjAwMMCll17KypUrATj//PM5+OCDty+7evVqPvKRj/CFL3yBfffdt221GQQ12bJ1G39yyXc7XcaofnThKztdgrTHu++++7j66qu55pprmDt3Lhs2bOCmm27aabnly5ezefNmbrnlFqBx9M+mTY0j7FevXs2HP/xhvvjFL7Y1BMChIUmq3Y9//GOOO+445s6dC8D8+fN3udxdd93FKaecQldXF11dXcybNw+A3/zmN1x44YVcccUV7Lfffm2vzyCQpElu3rx5zJs3j9WrV9eyfoNAkmr2spe9jFtvvZXHH38cgA0bNuxyuSOOOILly5czODjI4OAgGzduBGD27NksW7aMZcuWcffdd7e9PoNAkmp28MEH85a3vIVTTz2VN77xjVx11a4vuHDKKacwe/Zsjj/+eE444QR+8pOfbJ83f/58li1bxic+8Qnuvbe9d9ydcreq7O3tHVyyZEmnyxjVIxv7p8zO4t/fZ26ny5B2MlWuPrpmzRoOOuigTpexkx3r6u3tHfZ+BPYIJKlwBoEkFc4gkKTCGQSSVDiDQJIKZxBIUuG81pAktVE7Ljg5s3sa8+fsNeIyK1as4IYbbmDGjBlccsklLFq0aLe3ZxBIUhu144KTd3/g2BHnb9iwgeuuu45rrrmGe++9l8985jNcfvnlu709h4YkaYpZtWoVS5cupbu7m0MPPZQ1a9aMa30GgSRNMY899tj2K5MCjPcKEQaBJE0xPT092y9IBzBt2vi+yg0CSZpiDjvsMFauXMlTTz3F6tWrOfDAA8e1PncWS1IbzeyeNurO3rGsYyTz58/nxBNP5PTTT6e7u5uLL754XNszCCSpjUY77LNdTjvtNE477bS2rMuhIUkqnEEgSYUzCCSpcAaBJBXOIJCkwhkEkjQFDQwMcOqpp3L44Ydz2223jWtdHj4qSe30xDrYumV86+ieCXMWjLxIdzef//znWb58+fi2hUEgSe21dQt89vnjW8cF9426SFdXFwsXLhzfdioODUlS4QwCSSpcrUNDEXEE8FngSeBx4PTM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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "#  是否有deeplink\n",
    "plot_ratio(train_df, \"creative_has_deeplink\", \"click\")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "结论：从生成的结果来看，这三种(creative_is_voicead、creative_is_js、 app_paid)bool型特征的值为单个值，无法通过变化来影响是否点击，所以，理论上可以删除。而对于creative_is_jump和creative_is_download是互补关系，可以选择保留其中一个特征。\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 数据预处理(数据清洗)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 删除冗余数据"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 116,
   "metadata": {},
   "outputs": [],
   "source": [
    "del data[\"instance_id\"]\n",
    "\n",
    "del data[\"creative_is_js\"]\n",
    "del data[\"app_paid\"]\n",
    "del data[\"creative_is_voicead\"]\n",
    "\n",
    "del train\n",
    "del test"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 处理时间变量\n",
    "将时间戳类型的输出抽取为更细的时间参数,并分区"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 117,
   "metadata": {},
   "outputs": [],
   "source": [
    "def seg_hour(x):\n",
    "    \"\"\"划分时间间隔\"\"\"\n",
    "\n",
    "    if x > 0 and x <= 6:\n",
    "        return 1\n",
    "    elif x > 6 and x <= 12:\n",
    "        return 2\n",
    "    elif x > 12 and x <= 18:\n",
    "        return 3\n",
    "    else:\n",
    "        return 4"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 118,
   "metadata": {},
   "outputs": [],
   "source": [
    "# 时间向下细分\n",
    "data[\"day\"], data[\"hour\"] = get_time(data.time.values)\n",
    "data[\"hour_part\"] = data[\"hour\"].apply(lambda x: seg_hour(x))  # 组合特征"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 119,
   "metadata": {},
   "outputs": [],
   "source": [
    "# 删除时间列\n",
    "del data[\"time\"]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 120,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "<class 'pandas.core.frame.DataFrame'>\n",
      "RangeIndex: 3072915 entries, 0 to 3072914\n",
      "Data columns (total 33 columns):\n",
      " #   Column                 Dtype  \n",
      "---  ------                 -----  \n",
      " 0   city                   int64  \n",
      " 1   province               int64  \n",
      " 2   user_tags              object \n",
      " 3   carrier                int64  \n",
      " 4   devtype                int64  \n",
      " 5   make                   object \n",
      " 6   model                  object \n",
      " 7   nnt                    int64  \n",
      " 8   os                     int64  \n",
      " 9   osv                    object \n",
      " 10  os_name                object \n",
      " 11  adid                   int64  \n",
      " 12  advert_id              int64  \n",
      " 13  orderid                int64  \n",
      " 14  advert_industry_inner  object \n",
      " 15  campaign_id            int64  \n",
      " 16  creative_id            int64  \n",
      " 17  creative_tp_dnf        int64  \n",
      " 18  app_cate_id            float64\n",
      " 19  f_channel              object \n",
      " 20  app_id                 float64\n",
      " 21  inner_slot_id          object \n",
      " 22  creative_type          int64  \n",
      " 23  creative_width         int64  \n",
      " 24  creative_height        int64  \n",
      " 25  creative_is_jump       bool   \n",
      " 26  creative_is_download   bool   \n",
      " 27  creative_has_deeplink  bool   \n",
      " 28  advert_name            object \n",
      " 29  click                  int64  \n",
      " 30  day                    int64  \n",
      " 31  hour                   int64  \n",
      " 32  hour_part              int64  \n",
      "dtypes: bool(3), float64(2), int64(19), object(9)\n",
      "memory usage: 712.1+ MB\n"
     ]
    }
   ],
   "source": [
    "data.info()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 手机品牌处理\n",
    "清洗手机品牌和机型字段，对同类型进行合并（redmi->xiaomi, honour->huawei）"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 121,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array(['vivo', nan, 'HUAWEI', 'Xiaomi', 'OPPO', 'Xiaomi', nan, 'HUAWEI',\n",
       "       'samsung', 'HUAWEI', 'HUAWEI', 'V9S', 'OPPO', 'HUAWEI', nan,\n",
       "       'vivoV3MaxA', 'W909', 'SM-A8000', nan, nan, 'vivo', 'samsung', nan,\n",
       "       'HUAWEI', 'Xiaomi', 'HUAWEI', 'Meizu', 'Xiaomi', 'vivo', 'OPPO',\n",
       "       'HUAWEI', nan, nan, 'vivo', 'OPPO', 'Xiaomi', 'vivo', 'Letv',\n",
       "       'VOTO', 'Apple', 'HONOR', 'Xiaomi', 'ZTE', nan, nan, 'vivo',\n",
       "       'iPhone9,2', 'vivo', 'HUAWEI', 'vivo', 'HUAWEI', 'HUAWEI',\n",
       "       'LeMobile', 'OPPO A59s', 'blackshark', 'OPPO', 'vivo', 'vivo',\n",
       "       'Meizu', 'Xiaomi', 'vivo', 'OPPO', 'OPPO', '360', 'OPPO', 'SUGAR',\n",
       "       'HUAWEI', 'Apple', 'Meizu', 'iPhone8%2C1', 'HUAWEI', 'OPPO', nan,\n",
       "       nan, 'Meizu', 'vivo', 'OPPO A59s', 'vivo', 'Apple', 'Meizu',\n",
       "       'HUAWEI', 'OPPO', 'Apple', 'OPPO', 'HUAWEI', 'OPPO', 'OPPO',\n",
       "       'SM-G9250', 'vivo', 'vivo', 'Apple', 'vivo', 'READBOY', 'vivo',\n",
       "       'vivo', 'vivo', 'Xiaomi', 'SUGAR', 'OPPO', 'OPPO', 'OPPO',\n",
       "       'xiaomi', 'vivo', 'vivo', 'OPPO', nan, 'OPPO R9sk', 'vivo',\n",
       "       'HUAWEI', 'Xiaomi', 'Xiaomi', 'HUAWEI', 'Apple', 'vivo', 'HUAWEI',\n",
       "       'Apple', 'Meizu', 'vivo', 'Apple', 'vivo', 'vivo', 'GiONEE',\n",
       "       'OPPO', nan, 'OPPO', 'Xiaomi', 'OPPO', 'vivo', nan, 'vivo',\n",
       "       'HUAWEI', 'Xiaomi', 'HUAWEI', 'vivo', 'vivo', nan, 'oppo',\n",
       "       'HUAWEI', 'SPRD', nan, 'HONOR', 'OPPO', 'xiaolajiao', 'OPPO',\n",
       "       'HUAWEI', 'Apple', 'OPPO', 'Apple', 'BND-AL10', nan, 'HUAWEI', nan,\n",
       "       nan, 'Xiaomi', 'vivo', 'OPPO', 'HUAWEI', 'OPPO', 'vivo', 'OPPO',\n",
       "       'OPPO', 'OPPO', 'vivo', 'OPPO', 'HUAWEI', 'OPPO', 'HUAWEI',\n",
       "       'Apple', 'OPPO', 'HUAWEI', 'iPhone7,1', 'OPPO R9s', 'HUAWEI',\n",
       "       'OPPO', 'HUAWEI', nan, 'Meizu', 'vivo', 'HUAWEI', 'vivo', 'vivo',\n",
       "       'Apple', 'Apple', 'Apple', 'Meizu', 'OPPO', 'samsung', 'HUAWEI',\n",
       "       'OPPO', 'HUAWEI', 'OPPO', 'Apple', 'OPPO', 'OPPO',\n",
       "       '%2522BND-AL10%2522', 'Xiaomi', 'HUAWEI', 'vivo', 'apple', 'ivvi',\n",
       "       'apple', 'Apple', 'HUAWEI', 'OPPO', 'iPhone8,1', 'HONOR', 'nubia',\n",
       "       nan, 'HUAWEI', 'vivo', 'HUAWEI', 'vivo', 'HUAWEI', 'Apple', 'vivo',\n",
       "       'HUAWEI', 'OPPO', 'Apple', 'vivo', 'OPPO', 'iPhone8,1', 'Xiaomi',\n",
       "       'OPPO', 'OPPO', 'OPPO', 'OPPO', 'Xiaomi', 'OPPO', 'OPPO', 'Xiaomi',\n",
       "       'HUAWEI', 'OPPO', 'OPPO', 'HUAWEI', 'Xiaomi', 'samsung', 'OPPO',\n",
       "       'Xiaomi', 'EYU', 'Meizu', 'OPPO', 'OPPO', 'OPPO', 'APPLE', 'OPPO',\n",
       "       'HUAWEI', nan, 'vivo', 'Xiaomi', 'SM-A7000', 'HUAWEI', nan,\n",
       "       'HUAWEI', 'vivo', 'Meizu', 'OPPO A37m', 'samsung', 'vivo',\n",
       "       'Xiaomi', nan, 'OPPO A83', 'vivo', 'CMDC', nan, 'Meizu', 'HUAWEI',\n",
       "       'vivo', 'vivo', 'HUAWEI', 'OPPO', 'OPPO', 'OPPO', 'apple', 'OPPO',\n",
       "       'Apple', 'OPPO', 'Xiaomi', 'HUAWEI', nan, nan, 'HUAWEI', 'CMDC',\n",
       "       'HEYUF', 'OPPO', nan, 'HUAWEI', 'vivo', nan, 'OPPO', 'OPPO',\n",
       "       'OPPO', 'OnePlus', 'HUAWEI', 'HUAWEI', 'Apple', 'OPPO', 'OPPO A77',\n",
       "       'OPPO', 'HUAWEI', 'Meizu'], dtype=object)"
      ]
     },
     "execution_count": 121,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 手机型号\n",
    "data.make.values[:300]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 122,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "4922"
      ]
     },
     "execution_count": 122,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 有20314个小类\n",
    "len(data.make.unique())"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 123,
   "metadata": {},
   "outputs": [],
   "source": [
    "#  名称装换为小写\n",
    "\n",
    "col = []\n",
    "for va in data[\"make\"].values:\n",
    "    va = str(va)\n",
    "    if \",\" in va:\n",
    "        col.append(va.split(\",\")[0].lower())\n",
    "    elif \"-\" in va:\n",
    "        col.append(va.split(\"-\")[0].lower())\n",
    "    elif \" \" in va:\n",
    "        col.append(va.split(\" \")[0].lower())\n",
    "    else:\n",
    "        col.append(va.lower())"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 124,
   "metadata": {},
   "outputs": [],
   "source": [
    "# 修改同类品牌的下的子品牌\n",
    "for index in range(len(col)):\n",
    "    if \"apple\" in col[index]:\n",
    "        col[index] = \"apple\"\n",
    "    elif \"redmi\" in col[index]:\n",
    "        col[index] = \"xiaomi\"\n",
    "    elif \"honor\" == col[index]:\n",
    "        col[index] = \"huawei\"\n",
    "    elif col[index] == \"mi\":\n",
    "        col[index] = \"xiaomi\"\n",
    "    elif col[index] == \"nan\":\n",
    "        col[index] == np.nan\n",
    "    elif col[index] == \"meitu\":\n",
    "        col[index] == \"meizu\"\n",
    "    elif col[index] == \"le\" or col[index] == \"letv\" or col[index] == \"lemobile\" or col[index] == \"blephone\":\n",
    "        col[index] == \"leshi\""
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 125,
   "metadata": {},
   "outputs": [],
   "source": [
    "data[\"new_make\"] = col"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 126,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "2764"
      ]
     },
     "execution_count": 126,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "len(data.new_make.unique())"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 手机机型处理"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 127,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array(['vivo X7', 'OPPO A59s', 'BAC-TL00', 'Redmi Note 2', 'OPPO-R9s',\n",
       "       'MI+5', 'Redmi 3S', 'FRD-AL10', 'SM-G9350', 'EVA-AL10', 'LDN-AL20',\n",
       "       'V9S', 'OPPO-A83t', 'HUAWEI P7-L07', 'OPPO R9s', 'vivoV3MaxA',\n",
       "       'W909', 'SM-A8000', 'm836', 'Coolpad 8722V', 'vivo-X9s',\n",
       "       'SM-G9008W', 'BND-AL00', 'BAC-AL00', 'MI 5X', 'SLA-AL00', 'M5s',\n",
       "       'Redmi+4X', 'vivo+Y85', 'OPPO A37m', 'HUAWEI-CAZ-AL10',\n",
       "       'vivo Y53L', 'vivo-X9s-Plus', 'OPPO+R11s', 'Redmi%20Note%204',\n",
       "       'vivo-X9', 'Letv X500', 'VOTO-GT7', 'iPhone7,1', 'STF-AL10',\n",
       "       'MI 3', 'ZTE BA520', 'CAM-TL00H', 'X909T', 'vivo-X20A',\n",
       "       'iPhone9,2', 'vivo-X20Plus-A', 'ALP-AL00', 'vivo+X9', 'DLI-AL10',\n",
       "       'HUAWEI%20TIT-CL00', 'Le-X621', 'SKR-A0', 'OPPO-A59s',\n",
       "       'vivo-X7Plus', 'M621C', 'MI%25252525252B5X', 'vivo-Y79A',\n",
       "       'R7Plusm', 'OPPO-A33', '1605-A01', 'OPPO-A83', 'SUGAR-F11',\n",
       "       'HUAWEI%20TAG-TL00', 'iPhone 7 Plus', 'M6%20Note', 'iPhone8%2C1',\n",
       "       'VKY-AL00', 'OPPO-A57', 'OPPO A57', 'M6', 'vivo%20Y51A',\n",
       "       'vivo-Y66L', 'iPhone9,1', 'M3s', 'MHA-AL00', 'OPPO R11 Pluskt',\n",
       "       'iPhone10,1', 'OPPO R11s', 'HUAWEI-TAG-TL00', 'OPPO+R9s',\n",
       "       'OPPO+A57', 'SM-G9250', 'vivo+Y23L', 'vivo X20A',\n",
       "       'iPhone (undetected)', 'Readboy_G90S', 'vivo+Y51', 'vivo Y53n',\n",
       "       'Redmi-Note-4', 'SUGAR+F11', 'OPPO+R9m', 'PACM00', 'vivo+Y75A',\n",
       "       'vivo-Y31A', 'OPPO+A73t', 'vivo X20Plus A', 'OPPO R9sk',\n",
       "       'vivo-Y51A', 'COR-AL00', 'MI 5s', 'HUAWEI CAZ-AL10', 'iPhone9%2C2',\n",
       "       'vivo%20X9', 'iPhone7,2', 'M5 Note', 'vivo+Y67', 'iPhone 6',\n",
       "       'vivo%20Y66', 'vivo X9L', 'GN9010', 'OPPO A59m', 'Redmi-Note-4X',\n",
       "       'OPPO R9s Plus', 'vivo-X6S-A', 'PRA-AL00', 'MI-3', 'PE-TL00M',\n",
       "       'vivo Y55A', 'vivo-Y66', 'CHE-TL00H', 'OPPO R11 Plus', 'TRT-AL00A',\n",
       "       '20151209T', 'vivo X6SPlus D', 'KIW-AL10', 'OPPO A83', '20160526Q',\n",
       "       'OPPO+R11', 'EVA-TL00', 'iPhone 6s', 'BND-AL10', 'vivo X6Plus A',\n",
       "       'Che2-TL00', 'sm-a9000', 'OPPO R11', 'MI-MAX-2', 'vivo+X7',\n",
       "       'VTR-AL00', 'PADT00', 'vivo-Y55A', 'OPPO R9m', 'vivo+Y55A',\n",
       "       'OPPO-A57t', 'OPPO+R11t', 'KIW-UL00', 'BLN-AL10', 'OPPO+A83t',\n",
       "       'BLN-AL40', 'M651CY', 'FRD-AL00', 'vivo-Y35A', 'M3', 'SM-N9008V',\n",
       "       'MYA-AL10', 'A31', 'KIW-CL00', 'OPPO+R9tm', 'OPPO-A59m',\n",
       "       'OPPO+R9st', '%2522BND-AL10%2522', 'HUAWEI-NXT-AL10', 'iPhone8,1',\n",
       "       'ivvi-F2-T', 'iPhone', 'STF-AL00', 'OPPO-R9m', 'CAM-AL00',\n",
       "       'NX589J', 'NEM-AL10', 'BLA-AL00', 'RNE-AL00',\n",
       "       'iPhone 6s Plus (A1634/A1687/A1699)', 'vivo-X5M', 'iPhone8,2',\n",
       "       'OPPO A59st', 'HM-NOTE-1LTE', 'OPPO+A73', 'MI-5X', 'OPPO+A83',\n",
       "       '2014812', 'KIW-TL00H', 'OPPO-R9skt', 'PRA-AL00X', 'Redmi+5+Plus',\n",
       "       'SM-N9500', 'Redmi 4A', 'EYU-T3', 'M6+Note', 'OPPO+R11s+Plus',\n",
       "       'OPPO-R9sk', 'OPPO%20A73', 'vivo X9', 'Y35A', 'Redmi Note 4X',\n",
       "       'SM-A7000', 'LDN-AL00', 'scl-al00', 'EML-AL00', 'vivo X21A'],\n",
       "      dtype=object)"
      ]
     },
     "execution_count": 127,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "data.model.unique()[:200]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 128,
   "metadata": {},
   "outputs": [],
   "source": [
    "# 机型数据统一化处理\n",
    "lst = []\n",
    "\n",
    "for va in data.model.values:\n",
    "    va = str(va)\n",
    "\n",
    "    if \"-\" in va:\n",
    "        lst.append(va.replace('-', \" \"))\n",
    "    elif \"+\" in va:\n",
    "        lst.append(va.replace(\"+\", \" \"))\n",
    "    elif \",\" in va:\n",
    "        lst.append(va.replace(\",\", \" \"))\n",
    "    elif va == \"nan\":\n",
    "        lst.append(np.nan)\n",
    "    else:\n",
    "        lst.append(va)\n",
    "data[\"new_model\"] = lst"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 129,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array(['vivo X7', 'OPPO A59s', 'BAC TL00', 'Redmi Note 2', 'OPPO R9s',\n",
       "       'MI 5', 'Redmi 3S', 'FRD AL10', 'SM G9350', 'EVA AL10', 'LDN AL20',\n",
       "       'V9S', 'OPPO A83t', 'HUAWEI P7 L07', 'vivoV3MaxA', 'W909',\n",
       "       'SM A8000', 'm836', 'Coolpad 8722V', 'vivo X9s', 'SM G9008W',\n",
       "       'BND AL00', 'BAC AL00', 'MI 5X', 'SLA AL00', 'M5s', 'Redmi 4X',\n",
       "       'vivo Y85', 'OPPO A37m', 'HUAWEI CAZ AL10', 'vivo Y53L',\n",
       "       'vivo X9s Plus', 'OPPO R11s', 'Redmi%20Note%204', 'vivo X9',\n",
       "       'Letv X500', 'VOTO GT7', 'iPhone7 1', 'STF AL10', 'MI 3',\n",
       "       'ZTE BA520', 'CAM TL00H', 'X909T', 'vivo X20A', 'iPhone9 2',\n",
       "       'vivo X20Plus A', 'ALP AL00', 'DLI AL10', 'HUAWEI%20TIT CL00',\n",
       "       'Le X621', 'SKR A0', 'vivo X7Plus', 'M621C', 'MI%25252525252B5X',\n",
       "       'vivo Y79A', 'R7Plusm', 'OPPO A33', '1605 A01', 'OPPO A83',\n",
       "       'SUGAR F11', 'HUAWEI%20TAG TL00', 'iPhone 7 Plus', 'M6%20Note',\n",
       "       'iPhone8%2C1', 'VKY AL00', 'OPPO A57', 'M6', 'vivo%20Y51A',\n",
       "       'vivo Y66L', 'iPhone9 1', 'M3s', 'MHA AL00', 'OPPO R11 Pluskt',\n",
       "       'iPhone10 1', 'HUAWEI TAG TL00', 'SM G9250', 'vivo Y23L',\n",
       "       'iPhone (undetected)', 'Readboy_G90S', 'vivo Y51', 'vivo Y53n',\n",
       "       'Redmi Note 4', 'OPPO R9m', 'PACM00', 'vivo Y75A', 'vivo Y31A',\n",
       "       'OPPO A73t', 'OPPO R9sk', 'vivo Y51A', 'COR AL00', 'MI 5s',\n",
       "       'iPhone9%2C2', 'vivo%20X9', 'iPhone7 2', 'M5 Note', 'vivo Y67',\n",
       "       'iPhone 6', 'vivo%20Y66', 'vivo X9L', 'GN9010', 'OPPO A59m',\n",
       "       'Redmi Note 4X', 'OPPO R9s Plus', 'vivo X6S A', 'PRA AL00',\n",
       "       'PE TL00M', 'vivo Y55A', 'vivo Y66', 'CHE TL00H', 'OPPO R11 Plus',\n",
       "       'TRT AL00A', '20151209T', 'vivo X6SPlus D', 'KIW AL10',\n",
       "       '20160526Q', 'OPPO R11', 'EVA TL00', 'iPhone 6s', 'BND AL10',\n",
       "       'vivo X6Plus A', 'Che2 TL00', 'sm a9000', 'MI MAX 2', 'VTR AL00',\n",
       "       'PADT00', 'OPPO A57t', 'OPPO R11t', 'KIW UL00', 'BLN AL10',\n",
       "       'BLN AL40', 'M651CY', 'FRD AL00', 'vivo Y35A', 'M3', 'SM N9008V',\n",
       "       'MYA AL10', 'A31', 'KIW CL00', 'OPPO R9tm', 'OPPO R9st',\n",
       "       '%2522BND AL10%2522', 'HUAWEI NXT AL10', 'iPhone8 1', 'ivvi F2 T',\n",
       "       'iPhone', 'STF AL00', 'CAM AL00', 'NX589J', 'NEM AL10', 'BLA AL00',\n",
       "       'RNE AL00', 'iPhone 6s Plus (A1634/A1687/A1699)', 'vivo X5M',\n",
       "       'iPhone8 2', 'OPPO A59st', 'HM NOTE 1LTE', 'OPPO A73', '2014812',\n",
       "       'KIW TL00H', 'OPPO R9skt', 'PRA AL00X', 'Redmi 5 Plus', 'SM N9500',\n",
       "       'Redmi 4A', 'EYU T3', 'M6 Note', 'OPPO R11s Plus', 'OPPO%20A73',\n",
       "       'Y35A', 'SM A7000', 'LDN AL00', 'scl al00', 'EML AL00',\n",
       "       'vivo X21A', 'vivo Y923', 'MI 4LTE', 'M653', 'InFocus M2',\n",
       "       'm3 note', 'PRA TL10', 'vivo Y55', 'vivo Y66i', 'OPPO R9 Plusm A',\n",
       "       'MI%2525252525252B6', 'vivo Y37A', 'M 8', 'OPPO%20A83', 'zuk z1',\n",
       "       'HUAWEI TAG AL00', 'vivo X9i', 'SM A9100', 'OPPO%20R9s',\n",
       "       'ONEPLUS A3010', 'H60 L01', 'VIE AL10', 'iPhone5 3', 'OPPO A77',\n",
       "       'HUAWEI RIO AL00', 'HUAWEI RIO UL00', 'vivo Y71A'], dtype=object)"
      ]
     },
     "execution_count": 129,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "data.new_model.unique()[:200]"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 广告主行业划分\n",
    "形式：教育＿培训(划分)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 130,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0    101700_101704\n",
       "1    101900_101902\n",
       "2    102400_102401\n",
       "3         4_100206\n",
       "4    102400_102401\n",
       "Name: advert_industry_inner, dtype: object"
      ]
     },
     "execution_count": 130,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "data.advert_industry_inner.head(5)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 131,
   "metadata": {},
   "outputs": [],
   "source": [
    "lst1 = []\n",
    "lst2 = []\n",
    "\n",
    "for va in data.advert_industry_inner.values:\n",
    "    lst1.append(va.split(\"_\")[0])\n",
    "    lst2.append(va.split(\"_\")[1])\n",
    "data[\"advert_industry_inner1\"] = lst1\n",
    "data[\"advert_industry_inner2\"] = lst2"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 媒体广告位置划分\n",
    "如xf, iqy"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 132,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array(['xf_64FAC0085FC8DC679F6BF49A1F98445D', 'iqy_1000000000381-1-5-60',\n",
       "       'xf_275C061483984E075832A4373BDDF27B', ...,\n",
       "       'inmobi_016ea09738264c50928886373e449037',\n",
       "       'offline_A41566E4D3DA01AADC0F736CAA7AF2DB',\n",
       "       'inmobi_7747dc42c6194b81adb483b4c08220ec'], dtype=object)"
      ]
     },
     "execution_count": 132,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "data.inner_slot_id.unique()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 133,
   "metadata": {},
   "outputs": [],
   "source": [
    "lst = []\n",
    "for va in data.inner_slot_id.values:\n",
    "    lst.append(va.split(\"_\")[0])\n",
    "data[\"inner_slot_id1\"] = lst"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 134,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array(['xf', 'iqy', 'inmobi', 'omg', 'xb', 'offline', 'sohuvideo'],\n",
       "      dtype=object)"
      ]
     },
     "execution_count": 134,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "data.inner_slot_id1.unique()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 处理系统设备(难点)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### 操作系统"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 135,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 360x360 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# plt.pie(data.os.value_counts())\n",
    "plt.figure(figsize=(5, 5))\n",
    "percent = data.os.value_counts()\n",
    "plt.pie(x=percent, labels=[\"Andiord\", \"iOS\", \"Other\"], autopct=\"%1.2f%%\", startangle=90, rotatelabels=True\n",
    "        )\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 136,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>city</th>\n",
       "      <th>province</th>\n",
       "      <th>user_tags</th>\n",
       "      <th>carrier</th>\n",
       "      <th>devtype</th>\n",
       "      <th>make</th>\n",
       "      <th>model</th>\n",
       "      <th>nnt</th>\n",
       "      <th>os</th>\n",
       "      <th>osv</th>\n",
       "      <th>os_name</th>\n",
       "      <th>adid</th>\n",
       "      <th>advert_id</th>\n",
       "      <th>orderid</th>\n",
       "      <th>advert_industry_inner</th>\n",
       "      <th>campaign_id</th>\n",
       "      <th>creative_id</th>\n",
       "      <th>creative_tp_dnf</th>\n",
       "      <th>app_cate_id</th>\n",
       "      <th>f_channel</th>\n",
       "      <th>app_id</th>\n",
       "      <th>inner_slot_id</th>\n",
       "      <th>creative_type</th>\n",
       "      <th>creative_width</th>\n",
       "      <th>creative_height</th>\n",
       "      <th>creative_is_jump</th>\n",
       "      <th>creative_is_download</th>\n",
       "      <th>creative_has_deeplink</th>\n",
       "      <th>advert_name</th>\n",
       "      <th>click</th>\n",
       "      <th>day</th>\n",
       "      <th>hour</th>\n",
       "      <th>hour_part</th>\n",
       "      <th>new_make</th>\n",
       "      <th>new_model</th>\n",
       "      <th>advert_industry_inner1</th>\n",
       "      <th>advert_industry_inner2</th>\n",
       "      <th>inner_slot_id1</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>107779</th>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>unknown</td>\n",
       "      <td>1522727</td>\n",
       "      <td>230000191</td>\n",
       "      <td>3006413</td>\n",
       "      <td>101700_101704</td>\n",
       "      <td>1001787</td>\n",
       "      <td>2333359</td>\n",
       "      <td>8390206106730935773</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>xb_unknown</td>\n",
       "      <td>10</td>\n",
       "      <td>300</td>\n",
       "      <td>640</td>\n",
       "      <td>True</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>42A4CB9035B7F50E</td>\n",
       "      <td>0</td>\n",
       "      <td>5</td>\n",
       "      <td>11</td>\n",
       "      <td>2</td>\n",
       "      <td>nan</td>\n",
       "      <td>NaN</td>\n",
       "      <td>101700</td>\n",
       "      <td>101704</td>\n",
       "      <td>xb</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>187299</th>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>unknown</td>\n",
       "      <td>1511681</td>\n",
       "      <td>230000191</td>\n",
       "      <td>3004945</td>\n",
       "      <td>101700_101704</td>\n",
       "      <td>1001787</td>\n",
       "      <td>2330007</td>\n",
       "      <td>8390206106730935773</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>xb_unknown</td>\n",
       "      <td>10</td>\n",
       "      <td>300</td>\n",
       "      <td>640</td>\n",
       "      <td>True</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>42A4CB9035B7F50E</td>\n",
       "      <td>0</td>\n",
       "      <td>5</td>\n",
       "      <td>15</td>\n",
       "      <td>3</td>\n",
       "      <td>nan</td>\n",
       "      <td>NaN</td>\n",
       "      <td>101700</td>\n",
       "      <td>101704</td>\n",
       "      <td>xb</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>407466</th>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>unknown</td>\n",
       "      <td>1511681</td>\n",
       "      <td>230000191</td>\n",
       "      <td>3004945</td>\n",
       "      <td>101700_101704</td>\n",
       "      <td>1001787</td>\n",
       "      <td>2330007</td>\n",
       "      <td>8390206106730935773</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>xb_unknown</td>\n",
       "      <td>10</td>\n",
       "      <td>300</td>\n",
       "      <td>640</td>\n",
       "      <td>True</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>42A4CB9035B7F50E</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>9</td>\n",
       "      <td>2</td>\n",
       "      <td>nan</td>\n",
       "      <td>NaN</td>\n",
       "      <td>101700</td>\n",
       "      <td>101704</td>\n",
       "      <td>xb</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>428980</th>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>gd_2100001,3001985,3002753,3002945,3003055,300...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>unknown</td>\n",
       "      <td>1522725</td>\n",
       "      <td>230000191</td>\n",
       "      <td>3006413</td>\n",
       "      <td>101700_101704</td>\n",
       "      <td>1001787</td>\n",
       "      <td>2333357</td>\n",
       "      <td>8390206106730935773</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>xb_unknown</td>\n",
       "      <td>10</td>\n",
       "      <td>300</td>\n",
       "      <td>640</td>\n",
       "      <td>True</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>42A4CB9035B7F50E</td>\n",
       "      <td>0</td>\n",
       "      <td>5</td>\n",
       "      <td>11</td>\n",
       "      <td>2</td>\n",
       "      <td>nan</td>\n",
       "      <td>NaN</td>\n",
       "      <td>101700</td>\n",
       "      <td>101704</td>\n",
       "      <td>xb</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>443190</th>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>unknown</td>\n",
       "      <td>1522727</td>\n",
       "      <td>230000191</td>\n",
       "      <td>3006413</td>\n",
       "      <td>101700_101704</td>\n",
       "      <td>1001787</td>\n",
       "      <td>2333359</td>\n",
       "      <td>8390206106730935773</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>xb_unknown</td>\n",
       "      <td>10</td>\n",
       "      <td>300</td>\n",
       "      <td>640</td>\n",
       "      <td>True</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>42A4CB9035B7F50E</td>\n",
       "      <td>1</td>\n",
       "      <td>4</td>\n",
       "      <td>11</td>\n",
       "      <td>2</td>\n",
       "      <td>nan</td>\n",
       "      <td>NaN</td>\n",
       "      <td>101700</td>\n",
       "      <td>101704</td>\n",
       "      <td>xb</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>625456</th>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>2100083,2100094,2100138,2100084,2100029,210023...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>unknown</td>\n",
       "      <td>1522725</td>\n",
       "      <td>230000191</td>\n",
       "      <td>3006413</td>\n",
       "      <td>101700_101704</td>\n",
       "      <td>1001787</td>\n",
       "      <td>2333357</td>\n",
       "      <td>8390206106730935773</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>xb_unknown</td>\n",
       "      <td>10</td>\n",
       "      <td>300</td>\n",
       "      <td>640</td>\n",
       "      <td>True</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>42A4CB9035B7F50E</td>\n",
       "      <td>0</td>\n",
       "      <td>5</td>\n",
       "      <td>20</td>\n",
       "      <td>4</td>\n",
       "      <td>nan</td>\n",
       "      <td>NaN</td>\n",
       "      <td>101700</td>\n",
       "      <td>101704</td>\n",
       "      <td>xb</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>644365</th>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>2100042,2100041,gd_2100001,2100012,2100130,210...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>unknown</td>\n",
       "      <td>1511687</td>\n",
       "      <td>230000191</td>\n",
       "      <td>3004945</td>\n",
       "      <td>101700_101704</td>\n",
       "      <td>1001787</td>\n",
       "      <td>2330013</td>\n",
       "      <td>8390206106730935773</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>xb_unknown</td>\n",
       "      <td>10</td>\n",
       "      <td>300</td>\n",
       "      <td>640</td>\n",
       "      <td>True</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>42A4CB9035B7F50E</td>\n",
       "      <td>0</td>\n",
       "      <td>3</td>\n",
       "      <td>20</td>\n",
       "      <td>4</td>\n",
       "      <td>nan</td>\n",
       "      <td>NaN</td>\n",
       "      <td>101700</td>\n",
       "      <td>101704</td>\n",
       "      <td>xb</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>659053</th>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>3004059,3004209,3004214,3004266,3004292,300429...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>unknown</td>\n",
       "      <td>1585980</td>\n",
       "      <td>230000191</td>\n",
       "      <td>3012652</td>\n",
       "      <td>101700_101704</td>\n",
       "      <td>1001787</td>\n",
       "      <td>2342734</td>\n",
       "      <td>8390206106730935773</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>xb_unknown</td>\n",
       "      <td>10</td>\n",
       "      <td>300</td>\n",
       "      <td>640</td>\n",
       "      <td>True</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>42A4CB9035B7F50E</td>\n",
       "      <td>0</td>\n",
       "      <td>7</td>\n",
       "      <td>21</td>\n",
       "      <td>4</td>\n",
       "      <td>nan</td>\n",
       "      <td>NaN</td>\n",
       "      <td>101700</td>\n",
       "      <td>101704</td>\n",
       "      <td>xb</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>700720</th>\n",
       "      <td>137104104102100</td>\n",
       "      <td>137104104100100</td>\n",
       "      <td>NaN</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>unknown</td>\n",
       "      <td>1579448</td>\n",
       "      <td>230001690</td>\n",
       "      <td>3012188</td>\n",
       "      <td>101700_101711</td>\n",
       "      <td>1003546</td>\n",
       "      <td>2342344</td>\n",
       "      <td>8390229093704413749</td>\n",
       "      <td>100.0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>2071251.0</td>\n",
       "      <td>omg_LV_1001_YDLDVi_LD-11617</td>\n",
       "      <td>3</td>\n",
       "      <td>1280</td>\n",
       "      <td>720</td>\n",
       "      <td>True</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>862FF2E9B0AD4C14</td>\n",
       "      <td>0</td>\n",
       "      <td>4</td>\n",
       "      <td>10</td>\n",
       "      <td>2</td>\n",
       "      <td>nan</td>\n",
       "      <td>NaN</td>\n",
       "      <td>101700</td>\n",
       "      <td>101711</td>\n",
       "      <td>omg</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>780192</th>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>unknown</td>\n",
       "      <td>1511681</td>\n",
       "      <td>230000191</td>\n",
       "      <td>3004945</td>\n",
       "      <td>101700_101704</td>\n",
       "      <td>1001787</td>\n",
       "      <td>2330007</td>\n",
       "      <td>8390206106730935773</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>xb_unknown</td>\n",
       "      <td>10</td>\n",
       "      <td>300</td>\n",
       "      <td>640</td>\n",
       "      <td>True</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>42A4CB9035B7F50E</td>\n",
       "      <td>1</td>\n",
       "      <td>2</td>\n",
       "      <td>13</td>\n",
       "      <td>3</td>\n",
       "      <td>nan</td>\n",
       "      <td>NaN</td>\n",
       "      <td>101700</td>\n",
       "      <td>101704</td>\n",
       "      <td>xb</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                   city         province  \\\n",
       "107779                0                0   \n",
       "187299                0                0   \n",
       "407466                0                0   \n",
       "428980                0                0   \n",
       "443190                0                0   \n",
       "625456                0                0   \n",
       "644365                0                0   \n",
       "659053                0                0   \n",
       "700720  137104104102100  137104104100100   \n",
       "780192                0                0   \n",
       "\n",
       "                                                user_tags  carrier  devtype  \\\n",
       "107779                                                NaN        0        0   \n",
       "187299                                                NaN        0        0   \n",
       "407466                                                NaN        0        0   \n",
       "428980  gd_2100001,3001985,3002753,3002945,3003055,300...        0        0   \n",
       "443190                                                NaN        0        0   \n",
       "625456  2100083,2100094,2100138,2100084,2100029,210023...        0        0   \n",
       "644365  2100042,2100041,gd_2100001,2100012,2100130,210...        0        0   \n",
       "659053  3004059,3004209,3004214,3004266,3004292,300429...        0        0   \n",
       "700720                                                NaN        0        0   \n",
       "780192                                                NaN        0        0   \n",
       "\n",
       "       make model  nnt  os  osv  os_name     adid  advert_id  orderid  \\\n",
       "107779  NaN   NaN    0   0  NaN  unknown  1522727  230000191  3006413   \n",
       "187299  NaN   NaN    0   0  NaN  unknown  1511681  230000191  3004945   \n",
       "407466  NaN   NaN    0   0  NaN  unknown  1511681  230000191  3004945   \n",
       "428980  NaN   NaN    0   0  NaN  unknown  1522725  230000191  3006413   \n",
       "443190  NaN   NaN    0   0  NaN  unknown  1522727  230000191  3006413   \n",
       "625456  NaN   NaN    0   0  NaN  unknown  1522725  230000191  3006413   \n",
       "644365  NaN   NaN    0   0  NaN  unknown  1511687  230000191  3004945   \n",
       "659053  NaN   NaN    0   0  NaN  unknown  1585980  230000191  3012652   \n",
       "700720  NaN   NaN    0   0  NaN  unknown  1579448  230001690  3012188   \n",
       "780192  NaN   NaN    0   0  NaN  unknown  1511681  230000191  3004945   \n",
       "\n",
       "       advert_industry_inner  campaign_id  creative_id      creative_tp_dnf  \\\n",
       "107779         101700_101704      1001787      2333359  8390206106730935773   \n",
       "187299         101700_101704      1001787      2330007  8390206106730935773   \n",
       "407466         101700_101704      1001787      2330007  8390206106730935773   \n",
       "428980         101700_101704      1001787      2333357  8390206106730935773   \n",
       "443190         101700_101704      1001787      2333359  8390206106730935773   \n",
       "625456         101700_101704      1001787      2333357  8390206106730935773   \n",
       "644365         101700_101704      1001787      2330013  8390206106730935773   \n",
       "659053         101700_101704      1001787      2342734  8390206106730935773   \n",
       "700720         101700_101711      1003546      2342344  8390229093704413749   \n",
       "780192         101700_101704      1001787      2330007  8390206106730935773   \n",
       "\n",
       "        app_cate_id f_channel     app_id                inner_slot_id  \\\n",
       "107779          NaN       NaN        NaN                   xb_unknown   \n",
       "187299          NaN       NaN        NaN                   xb_unknown   \n",
       "407466          NaN       NaN        NaN                   xb_unknown   \n",
       "428980          NaN       NaN        NaN                   xb_unknown   \n",
       "443190          NaN       NaN        NaN                   xb_unknown   \n",
       "625456          NaN       NaN        NaN                   xb_unknown   \n",
       "644365          NaN       NaN        NaN                   xb_unknown   \n",
       "659053          NaN       NaN        NaN                   xb_unknown   \n",
       "700720        100.0       NaN  2071251.0  omg_LV_1001_YDLDVi_LD-11617   \n",
       "780192          NaN       NaN        NaN                   xb_unknown   \n",
       "\n",
       "        creative_type  creative_width  creative_height  creative_is_jump  \\\n",
       "107779             10             300              640              True   \n",
       "187299             10             300              640              True   \n",
       "407466             10             300              640              True   \n",
       "428980             10             300              640              True   \n",
       "443190             10             300              640              True   \n",
       "625456             10             300              640              True   \n",
       "644365             10             300              640              True   \n",
       "659053             10             300              640              True   \n",
       "700720              3            1280              720              True   \n",
       "780192             10             300              640              True   \n",
       "\n",
       "        creative_is_download  creative_has_deeplink       advert_name  click  \\\n",
       "107779                 False                  False  42A4CB9035B7F50E      0   \n",
       "187299                 False                  False  42A4CB9035B7F50E      0   \n",
       "407466                 False                  False  42A4CB9035B7F50E      0   \n",
       "428980                 False                  False  42A4CB9035B7F50E      0   \n",
       "443190                 False                  False  42A4CB9035B7F50E      1   \n",
       "625456                 False                  False  42A4CB9035B7F50E      0   \n",
       "644365                 False                  False  42A4CB9035B7F50E      0   \n",
       "659053                 False                  False  42A4CB9035B7F50E      0   \n",
       "700720                 False                  False  862FF2E9B0AD4C14      0   \n",
       "780192                 False                  False  42A4CB9035B7F50E      1   \n",
       "\n",
       "        day  hour  hour_part new_make new_model advert_industry_inner1  \\\n",
       "107779    5    11          2      nan       NaN                 101700   \n",
       "187299    5    15          3      nan       NaN                 101700   \n",
       "407466    1     9          2      nan       NaN                 101700   \n",
       "428980    5    11          2      nan       NaN                 101700   \n",
       "443190    4    11          2      nan       NaN                 101700   \n",
       "625456    5    20          4      nan       NaN                 101700   \n",
       "644365    3    20          4      nan       NaN                 101700   \n",
       "659053    7    21          4      nan       NaN                 101700   \n",
       "700720    4    10          2      nan       NaN                 101700   \n",
       "780192    2    13          3      nan       NaN                 101700   \n",
       "\n",
       "       advert_industry_inner2 inner_slot_id1  \n",
       "107779                 101704             xb  \n",
       "187299                 101704             xb  \n",
       "407466                 101704             xb  \n",
       "428980                 101704             xb  \n",
       "443190                 101704             xb  \n",
       "625456                 101704             xb  \n",
       "644365                 101704             xb  \n",
       "659053                 101704             xb  \n",
       "700720                 101711            omg  \n",
       "780192                 101704             xb  "
      ]
     },
     "execution_count": 136,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "#  其他系统的有关信息缺失情况\n",
    "data.loc[data.os == 0].head(10)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 137,
   "metadata": {},
   "outputs": [],
   "source": [
    "# 其他类型操作系统比重极少，可将其归为安卓类\n",
    "data.os.replace(0, 2, inplace=True)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 138,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([2, 1])"
      ]
     },
     "execution_count": 138,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "data.os.unique()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### 操作系统版本"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 139,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "366"
      ]
     },
     "execution_count": 139,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "#  number\n",
    "len(data.osv.unique())"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 140,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "24243"
      ]
     },
     "execution_count": 140,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "#  nan\n",
    "sum(data.osv.isnull())"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 141,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array(['5.1.1', '5.1', '8.0.0', '5.0.2', '6.0.1', '7.0', '7.0.0', '6.0',\n",
       "       '7.1.1', '4.4.2', '7.1.2', '8.1.0', '5.1.0', '4.4.4', '8.4',\n",
       "       '4.2.1', '6.0.0', '4.2.2', '11.4', '11.4.1', '11.2.5', '11.3',\n",
       "       '11.1.1', '9.3.5', '11.0', '11.3.1', '10.3.3', '5.0', '10.2',\n",
       "       '11.2.6', '10.1.1', '12.0', '11.2.1', '10.1', nan, '4.3', '10.0.2',\n",
       "       '11.1', '8.1', 'iOS 11.4', '9.3.2', '10.3.1', '4.4', '10.2.1',\n",
       "       '9.3.3', '24', '27', '11.1.2', '26.0.1', '5.0.1', '4.1.2', '4.3.0',\n",
       "       '10.0.1', '9.0.2', '9.1', '11.2.2', '11.0.2', '7.1', '8.4.1',\n",
       "       '9.3', '5.0.0', '11.0.3', '9.0', '11.0.1', '8.2', '10.3.2',\n",
       "       'iOS 11.4.1', '8.1.3', '4.0.4', '8.0', '4.4.3', 'android5.1.1',\n",
       "       '2.3.6', '25', '9.3.4', 'android6.0.1', '8.3', '9.2.1', '23',\n",
       "       'iPhone OS 9.2.1', '7.0.5', '26', '9_3_5', '1.0', '22', '9.2',\n",
       "       '8.1.1', '19', '4.1', '11.2', '6.1', '9.3.1', '11_4', '11_0_2',\n",
       "       '4.1.1', '6.1.2', '6.0.2', '9.0.1', 'iOS 10.3.3', '10.3', '4.4.0',\n",
       "       '4.0.3', 'iOS 11.2.2', '8.0.2', 'android4.4.4', 'iOS 11.2.1',\n",
       "       '8.1.2', '4.4.5', '5.0.5', '10.0', 'iOS 11.3.1', 'android8.0.0',\n",
       "       '6.1.0', 'iOS 11.0.3', '4.2', 'iOS 10.2.1', 'android7.1.2',\n",
       "       '7.0.4', '11_2_5', '2.2.2', 'iOS 11.2.6', 'android5.0.2',\n",
       "       'iPhone OS 7.0.6', 'iOS11.4.1', 'iOS 10.3.2', '23.0.1',\n",
       "       'iPhone OS 9.1', '3.1.0', 'iOS 11.3', 'iOS 11.2.5', '10.0.3',\n",
       "       'android7.0', 'iOS11.3', 'android7.1.1', 'android6.0',\n",
       "       'iOS 10.0.2', '7.0.2', 'iOS11.2.6', 'iOS10.3.3', '6.3.0',\n",
       "       'iOS11.0.3', '24.0.0', 'iOS 10.1.1', 'iPhone OS 9.2', '5.3',\n",
       "       '4.0.2', 'iOS11.4', '2.3.5', '4.0.1', '21', '7.0.3', '11_2_1',\n",
       "       'iOS 11.1.2', '11_2_6', 'iPhone OS 9.3.2', '4.2.0',\n",
       "       'iPhone OS 9.3.5', 'android8.1.0', 'iOS 10.1', '18', 'unknown',\n",
       "       '22.0.1', '11.19999980926514', '11_1_2', '2.3.3', 'android5.1',\n",
       "       '4.0', 'iOS 11.1', '10_2_1', '10_1_1', '2.3.4', '2.3.7', '26.0.0',\n",
       "       '10.2.0', '10.1.3', 'iOS 10.0.3', '25.0.1', 'iPhone OS 9.0.2',\n",
       "       '23.0.0', 'iOS11.3.1', '11.4.0', '11.0.0', '9.2.0', 'iOS11.2.5',\n",
       "       'iPhone OS 9.3.3', '10.3.4', '22.0.0', 'iOS10.2.1',\n",
       "       'iPhoneOS9.3.1', '9.1.0', 'iOS 11.2', '5.1 by mrkindaiji.0',\n",
       "       '11_2_2', 'iOS 10.2', '2.9.2', '3.1', 'iPhone OS 9.3.4', '9_0_2',\n",
       "       '11_3', '9_2_1', '11.39999961853027', 'iOS11.1.1', '10_3_1', '6.3',\n",
       "       'iOS 11.0', '10_3_2', '11_0_3', '11_4_1', '4.4.1',\n",
       "       '5.3.0-FL-20170914', '4.3.1', 'iOS 11.0.2', 'iOS 12.0', '6.1.6',\n",
       "       'iPhone OS 9.3.1', '2.3', '11_1', '19.0.1', '24.0.1', '11.3.3',\n",
       "       '5.12', 'Android 7.0', '9', '3.0.4-RS-20160720.1914', '8_1_2',\n",
       "       '27.0.0', '4.3.2', '4.3.3', '17.0.0', '11', 'iPhone OS 9.0',\n",
       "       '7.0.6', 'Android 5.1', 'iOS11.2.1', 'iOS 11.0.1', '11.3.0',\n",
       "       '25.0.0', 'Linux', '11_1_1', 'iOS10.2', 'iOS11.1.2',\n",
       "       'iPhone OS 8.4.1', '8.3.0', '5.3.0-FL-20170914.9999', '7.0.1',\n",
       "       'iOS10.3.2', '8_1_3', 'iOS10.1.1', '19.0.0', '10.3.0', '10_3_3',\n",
       "       '10.1.0', 'iPhone OS 6.1.2', '6.1.3', '11.30000019073486',\n",
       "       'iOS 11.1.1', '8_3', '537.36', 'android4.4.2', '11.1.0',\n",
       "       'iOS 10.0.1', '11_3_1', '5.2', 'iOS11.2.2', '9_3_1',\n",
       "       'iPhone OS 7.1.1', '11_2', 'iPhoneOS9.3.5', '5.2.3',\n",
       "       '10.30000019073486', '8_4_1', '17.0.1', '9.0.0', 'iOS10.0.2',\n",
       "       '6.1.4', '11.1.3', '10.1.2', 'iOS11.1', '9_3', 'iOS 10.0',\n",
       "       'iPhoneOS8.1.2', '9_3_4', '9_1', '12.0.0', '2.0.0-R-20180326.1451',\n",
       "       'iPhoneOS8.4', '8.2.0', 'iPhone OS 5.1.1', 'iPhone OS 7.1.2',\n",
       "       '7_1', '10_2', '4.1.0', '5.3.0', '7.21', 'iOS 10.3.1', '8_4',\n",
       "       '4.0.0', '9_3_2', 'iPhoneOS9.3.2', 'iPhone OS 8.4', 'iOS11.0.1',\n",
       "       'iPhone OS 8.1.2', '11_0', '7.2', '11.10000038146973',\n",
       "       'iPhone OS 9.3', 'iPhone OS 9.0.1', 'JiangNan', 'iPhone OS 8.3',\n",
       "       '10_0_2', '5.1.5', '8.4.0', '8.0.1', 'iOS10.3.1', '9.3.0', '6.0.7',\n",
       "       '11.2.0', '21.0.0', 'P', '10.0.0', 'android4.2.2', 'iOS11.0', '17',\n",
       "       'iOS 10.3', 'iPhoneOS8.3', '4.4.6', 'iOS10.0.3', 'iPhoneOS10.3.2',\n",
       "       '6.2.1', '10.10000038146973', 'iPhone OS 8.1.1', '6.5.1', '6.1.1',\n",
       "       'iOS11.0.2', '4.3.5', 'iPhoneOS9.2.1', '2.0', '9_2', 'O',\n",
       "       'android4.3', '2.3.10', 'iPhoneOS8.1', '3.1.1', '10_1',\n",
       "       'iPhoneOS9.0', '4.1.9', '15.0.0', '10_0_1', 'android5.0',\n",
       "       'android5.0.1', 'iOS10.0', 'iPhoneOS8.2', 'Android 6.0.1',\n",
       "       'iPhoneOS9.3.3', '3.2', '9.100000381469727', '3.0.1', '15.0.1',\n",
       "       '8_2', 'android4.1.2',\n",
       "       '\\x05��5.1.1��\\x06��LMY47V����\\uffff\\uffff\\uffff\\uffff', '8_0',\n",
       "       '11_0_1', 'iPhoneOS9.3.4', 'B770', 'Android 6.0'], dtype=object)"
      ]
     },
     "execution_count": 141,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "data.osv.unique()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 142,
   "metadata": {},
   "outputs": [],
   "source": [
    "# 去除os版本前缀\n",
    "lst = []\n",
    "\n",
    "for va in data.osv.values:\n",
    "    va = str(va)\n",
    "    va = va.replace(\" \", \"\")\n",
    "    va = va.replace(\"iOS\", \"\")\n",
    "    va = va.replace(\"android\", \"\")\n",
    "    va = va.replace(\"_\", \".\")\n",
    "    va = va.replace(\"Android5.1\", \".\")\n",
    "    try:\n",
    "        int(va)\n",
    "        lst.append(np.nan)\n",
    "    except:\n",
    "        sp = [\"nan\", \"11.39999961853027\", \"10.30000019073486\",\n",
    "              \"unknown\", \"11.30000019073486\"]\n",
    "        if va in sp:\n",
    "            lst.append(np.nan)\n",
    "        elif va == \"3.0.4-RS-20160720.1914\":\n",
    "            lst.append(\"3.0.4\")\n",
    "        else:\n",
    "            lst.append(va)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 87,
   "metadata": {},
   "outputs": [],
   "source": [
    "temp = pd.Series(lst).value_counts()\n",
    "temp = temp[temp < 2].index.tolist()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 81,
   "metadata": {},
   "outputs": [],
   "source": [
    "# 处理异常值\n",
    "for i in range(len(lst)):\n",
    "    if lst[i] in temp:\n",
    "        lst[i] = np.nan"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 143,
   "metadata": {},
   "outputs": [],
   "source": [
    "data[\"osv\"] = lst"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 144,
   "metadata": {},
   "outputs": [],
   "source": [
    "# 版本号细分\n",
    "lst1 = []\n",
    "lst2 = []\n",
    "lst3 = []\n",
    "\n",
    "\n",
    "for va in data[\"osv\"].values:\n",
    "    va = str(va).split(\".\")\n",
    "    if len(va) < 3:\n",
    "        　#  example : 10.2 or 10 or nan\n",
    "        va.extend([\"0\", \"0\", \"0\"])\n",
    "    lst1.append(va[0])\n",
    "    lst2.append(va[1])\n",
    "    lst3.append(va[2])\n",
    "\n",
    "\n",
    "data[\"osv1\"] = lst1\n",
    "data[\"osv2\"] = lst2\n",
    "data[\"osv3\"] = lst3"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 157,
   "metadata": {},
   "outputs": [],
   "source": [
    "# 添加系统号\n",
    "def getlst(col1, col2):\n",
    "    \"\"\"\n",
    "    获得系统名称\n",
    "    col1: os\n",
    "    col2: osv\n",
    "    \"\"\"\n",
    "\n",
    "    arr2 = data[col2].astype(str).fillna(value=\"-1\").values\n",
    "    arr1 = data[col1].astype(str).values\n",
    "    lst = []\n",
    "\n",
    "    for i in range(len(arr1)):\n",
    "        lst.append(arr1[i] + \"_\" + arr2[i])  # os_version\n",
    "\n",
    "    return lst"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 158,
   "metadata": {},
   "outputs": [],
   "source": [
    "# os:  2:android, 1:iPhone\n",
    "data[\"os_name\"] = getlst(\"os\", \"osv\")\n",
    "data[\"os_name1\"] = getlst(\"os\", \"osv1\")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 对于bool型数据进行处理"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 163,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "creative_is_jump\n",
      "creative_is_download\n",
      "creative_has_deeplink\n"
     ]
    }
   ],
   "source": [
    "# 打印bool类型数据\n",
    "bool_feture = []\n",
    "cols = data.columns\n",
    "\n",
    "for col in cols:\n",
    "    if str(data[col].dtype) == 'bool':\n",
    "        print(col)\n",
    "        bool_feture.append(str(col))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 164,
   "metadata": {},
   "outputs": [],
   "source": [
    "# True:1 False:0\n",
    "for feature in bool_feture:\n",
    "    data[feature] = data[feature].astype(int)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 165,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "<class 'pandas.core.frame.DataFrame'>\n",
      "RangeIndex: 3072915 entries, 0 to 3072914\n",
      "Data columns (total 42 columns):\n",
      " #   Column                  Dtype  \n",
      "---  ------                  -----  \n",
      " 0   city                    int64  \n",
      " 1   province                int64  \n",
      " 2   user_tags               object \n",
      " 3   carrier                 int64  \n",
      " 4   devtype                 int64  \n",
      " 5   make                    object \n",
      " 6   model                   object \n",
      " 7   nnt                     int64  \n",
      " 8   os                      int64  \n",
      " 9   osv                     object \n",
      " 10  os_name                 object \n",
      " 11  adid                    int64  \n",
      " 12  advert_id               int64  \n",
      " 13  orderid                 int64  \n",
      " 14  advert_industry_inner   object \n",
      " 15  campaign_id             int64  \n",
      " 16  creative_id             int64  \n",
      " 17  creative_tp_dnf         int64  \n",
      " 18  app_cate_id             float64\n",
      " 19  f_channel               object \n",
      " 20  app_id                  float64\n",
      " 21  inner_slot_id           object \n",
      " 22  creative_type           int64  \n",
      " 23  creative_width          int64  \n",
      " 24  creative_height         int64  \n",
      " 25  creative_is_jump        int64  \n",
      " 26  creative_is_download    int64  \n",
      " 27  creative_has_deeplink   int64  \n",
      " 28  advert_name             object \n",
      " 29  click                   int64  \n",
      " 30  day                     int64  \n",
      " 31  hour                    int64  \n",
      " 32  hour_part               int64  \n",
      " 33  new_make                object \n",
      " 34  new_model               object \n",
      " 35  advert_industry_inner1  object \n",
      " 36  advert_industry_inner2  object \n",
      " 37  inner_slot_id1          object \n",
      " 38  osv1                    object \n",
      " 39  osv2                    object \n",
      " 40  osv3                    object \n",
      " 41  os_name1                object \n",
      "dtypes: float64(2), int64(22), object(18)\n",
      "memory usage: 984.7+ MB\n"
     ]
    }
   ],
   "source": [
    "data.info()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 用户标签信息处理\n",
    "重新给用户指定标签信息，构建新的特征"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 166,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0          ,3003303,3003319,3003371,3003375,3003379,30034...\n",
       "1          3003779,3003843,3003851,3003863,3003865,300386...\n",
       "2                                            3004430,3004434\n",
       "3          ag_2100036,gd_2100000,3001749,3001989,3002121,...\n",
       "4                                                        NaN\n",
       "                                 ...                        \n",
       "1345249    2100098,2100254,2100191,3004081,3004093,300414...\n",
       "1345250    gd_2100001,3002095,3002097,3002179,3002263,300...\n",
       "1345251    3003779,3003843,3003845,3003863,3004059,300408...\n",
       "1345252    3003799,3003805,3003815,3003819,3003821,300385...\n",
       "1345253    2100141,2100078,3001769,3001881,3001889,300195...\n",
       "Length: 1345254, dtype: object"
      ]
     },
     "execution_count": 166,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "#  构建映射表\n",
    "se = pd.Series(data[\"user_tags\"].drop_duplicates().values)\n",
    "se"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 167,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0                0\n",
       "1                1\n",
       "2                2\n",
       "3                3\n",
       "4                4\n",
       "            ...   \n",
       "3072910          4\n",
       "3072911     410658\n",
       "3072912    1345252\n",
       "3072913    1345253\n",
       "3072914          4\n",
       "Name: user_id, Length: 3072915, dtype: int64"
      ]
     },
     "execution_count": 167,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "#  映射索引变为新的标签, 重新map id\n",
    "data[\"user_id\"] = data[\"user_tags\"].map(pd.Series(se.index, index=se.values))\n",
    "data.user_id"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 168,
   "metadata": {},
   "outputs": [],
   "source": [
    "data.user_tags.fillna(value=\"-1\", inplace=True)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 170,
   "metadata": {},
   "outputs": [],
   "source": [
    "lst = []\n",
    "\n",
    "for va in data.user_tags.values:\n",
    "    va = va.replace(\",\", \" \")\n",
    "    lst.append(va)\n",
    "\n",
    "data.user_tags = lst"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 查看缺失值情况"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 175,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Total</th>\n",
       "      <th>Percent</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>f_channel</th>\n",
       "      <td>2837306</td>\n",
       "      <td>92.332720</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>make</th>\n",
       "      <td>305052</td>\n",
       "      <td>9.927121</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>osv</th>\n",
       "      <td>31217</td>\n",
       "      <td>1.015876</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>model</th>\n",
       "      <td>23131</td>\n",
       "      <td>0.752738</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>new_model</th>\n",
       "      <td>23131</td>\n",
       "      <td>0.752738</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>app_cate_id</th>\n",
       "      <td>6802</td>\n",
       "      <td>0.221353</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>app_id</th>\n",
       "      <td>6802</td>\n",
       "      <td>0.221353</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>user_tags</th>\n",
       "      <td>0</td>\n",
       "      <td>0.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>advert_id</th>\n",
       "      <td>0</td>\n",
       "      <td>0.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>creative_tp_dnf</th>\n",
       "      <td>0</td>\n",
       "      <td>0.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>creative_id</th>\n",
       "      <td>0</td>\n",
       "      <td>0.000000</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                   Total    Percent\n",
       "f_channel        2837306  92.332720\n",
       "make              305052   9.927121\n",
       "osv                31217   1.015876\n",
       "model              23131   0.752738\n",
       "new_model          23131   0.752738\n",
       "app_cate_id         6802   0.221353\n",
       "app_id              6802   0.221353\n",
       "user_tags              0   0.000000\n",
       "advert_id              0   0.000000\n",
       "creative_tp_dnf        0   0.000000\n",
       "creative_id            0   0.000000"
      ]
     },
     "execution_count": 175,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "Total = data.isnull().sum().sort_values(ascending=False)\n",
    "Percent = (data.isnull().sum()/data.isnull().count()\n",
    "           ).sort_values(ascending=False)*100\n",
    "missing_data = pd.concat([Total, Percent], axis=1, keys=[\"Total\", \"Percent\"])\n",
    "missing_data[:11]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 177,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 864x432 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "# 可视化缺失值\n",
    "index = 10\n",
    "\n",
    "fig, ax = plt.subplots(figsize=(12, 6))\n",
    "sns.barplot(x=missing_data[:index].index,\n",
    "            y=missing_data.Percent[:index], hue_order=True)\n",
    "plt.xticks(rotation=90)\n",
    "plt.xlabel(\"missing_features\", fontsize=14)\n",
    "plt.ylabel(\"Percent\", fontsize=14)\n",
    "plt.title(\"The percent of missing_feature\", fontsize=16)\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 178,
   "metadata": {},
   "outputs": [],
   "source": [
    "def get_missinon_info(df, miss_festures):\n",
    "    \"\"\"输出缺失值的类型即数据值可取大小\"\"\"\n",
    "\n",
    "    print(\"总样本量:%d\" % len(df))\n",
    "\n",
    "    for feature in missing_features:\n",
    "\n",
    "        print(\"Feature:{} Dtype:{}, Lenth:{} \".format(\n",
    "            feature, df[feature].dtype, len(df[feature].unique())))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 179,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "总样本量:3072915\n",
      "Feature:f_channel Dtype:object, Lenth:155 \n",
      "Feature:make Dtype:object, Lenth:4922 \n",
      "Feature:osv Dtype:object, Lenth:228 \n",
      "Feature:model Dtype:object, Lenth:20314 \n",
      "Feature:new_model Dtype:object, Lenth:17296 \n",
      "Feature:app_cate_id Dtype:float64, Lenth:23 \n",
      "Feature:app_id Dtype:float64, Lenth:520 \n"
     ]
    }
   ],
   "source": [
    "# 探索是否为名义变量\n",
    "missing_features = list(missing_data.loc[missing_data.Total > 0].index)\n",
    "get_missinon_info(data, missing_features)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 特征编码"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### 特征类型分析\n",
    "use_tags表示唯一性,不要编码  \n",
    "creative_width, creative_height :属于数值型特征变量不需要进行编码  \n",
    "creative_is_jump, creative_is_download, creative_has_deeplink :0, 1  \n",
    "day :一周  \n",
    "click :目标 [0, 1]  \n",
    "hour_part :[1, 2, 3, 4]   \n",
    "osv1, osv2, osv3 :类别型数值变量  "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 180,
   "metadata": {},
   "outputs": [],
   "source": [
    "from sklearn.preprocessing import LabelEncoder"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 182,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "user_tags\n",
      "make\n",
      "model\n",
      "osv\n",
      "os_name\n",
      "advert_industry_inner\n",
      "f_channel\n",
      "inner_slot_id\n",
      "advert_name\n",
      "new_make\n",
      "new_model\n",
      "advert_industry_inner1\n",
      "advert_industry_inner2\n",
      "inner_slot_id1\n",
      "osv1\n",
      "osv2\n",
      "osv3\n",
      "os_name1\n"
     ]
    }
   ],
   "source": [
    "# 打印object类型数据\n",
    "bool_feture = []\n",
    "cols = data.columns\n",
    "\n",
    "for col in cols:\n",
    "    if str(data[col].dtype) == 'object':\n",
    "        print(col)\n",
    "        bool_feture.append(str(col))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 320,
   "metadata": {},
   "outputs": [],
   "source": [
    "# all_feature = [''city'', ''province'', 'user_tags', ''carrier'', ''devtype'', ''make'', ''model'',\n",
    "#        ''nnt'', ''os'', ''osv'', ''os_name'', ''adid'', ''advert_id'', ''orderid'',\n",
    "#        ''advert_industry_inner'', ''campaign_id'', ''creative_id'',\n",
    "#        ''creative_tp_dnf'', ''app_cate_id'', ''f_channel'', ''app_id'',\n",
    "#        ''inner_slot_id'', ''creative_type'', 'creative_width', 'creative_height',\n",
    "#        'creative_is_jump', 'creative_is_download', 'creative_has_deeplink',\n",
    "#        ''advert_name'', 'click', 'day', ''hour'', 'hour_part', ''new_make'',\n",
    "#        ''advert_industry_inner1'', ''advert_industry_inner2'', ''inner_slot_id1'',\n",
    "#        'osv1', 'osv2', 'osv3', ''os_name1'', ''user_id'', ''new_model'']"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 183,
   "metadata": {},
   "outputs": [],
   "source": [
    "type_feature = ['city', 'province', 'carrier', 'devtype', 'make', 'model',\n",
    "                'nnt', 'os', 'osv', 'os_name', 'adid', 'advert_id', 'orderid',\n",
    "                'advert_industry_inner', 'campaign_id', 'creative_id',\n",
    "                'creative_tp_dnf', 'app_cate_id', 'f_channel', 'app_id',\n",
    "                'inner_slot_id', 'creative_type',\n",
    "                'advert_name',  'hour',  'new_make',\n",
    "                'advert_industry_inner1', 'advert_industry_inner2',\n",
    "                'inner_slot_id1', 'user_id', 'new_model', 'os_name1']"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 184,
   "metadata": {},
   "outputs": [],
   "source": [
    "# 标签编码\n",
    "for feature in type_feature:\n",
    "    try:\n",
    "        data[feature] = LabelEncoder().fit_transform(\n",
    "            data[feature].fillna(-1).apply(int))  # 字符型数值转为int类型\n",
    "    except:\n",
    "        data[feature] = LabelEncoder().fit_transform(\n",
    "            data[feature].fillna(\"-1\"))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 186,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array(['5', '8', '6', '7', '4', '11', '9', '10', '12', 'nan', '26', '2',\n",
       "       'iPhoneOS9', '1', 'iPhoneOS7', '23', '3', '24', '22', '25', '19',\n",
       "       'Android7', '27', '17', '', 'Linux', 'iPhoneOS8', 'iPhoneOS6',\n",
       "       '537', 'iPhoneOS5', 'JiangNan', '21', 'P', 'iPhoneOS10', 'O', '15',\n",
       "       'Android6', '\\x05��5', 'B770'], dtype=object)"
      ]
     },
     "execution_count": 186,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "data.osv1.unique()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 187,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "39"
      ]
     },
     "execution_count": 187,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "len(data.osv1.unique())"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 188,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "1345254"
      ]
     },
     "execution_count": 188,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "len(data.user_tags.unique())"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 189,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "1345254"
      ]
     },
     "execution_count": 189,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "len(data.user_tags.unique())"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 191,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Total</th>\n",
       "      <th>Percent</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>user_id</th>\n",
       "      <td>0</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>os_name</th>\n",
       "      <td>0</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>app_cate_id</th>\n",
       "      <td>0</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>creative_tp_dnf</th>\n",
       "      <td>0</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>creative_id</th>\n",
       "      <td>0</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>campaign_id</th>\n",
       "      <td>0</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>advert_industry_inner</th>\n",
       "      <td>0</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>orderid</th>\n",
       "      <td>0</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>advert_id</th>\n",
       "      <td>0</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>adid</th>\n",
       "      <td>0</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>osv</th>\n",
       "      <td>0</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                       Total  Percent\n",
       "user_id                    0      0.0\n",
       "os_name                    0      0.0\n",
       "app_cate_id                0      0.0\n",
       "creative_tp_dnf            0      0.0\n",
       "creative_id                0      0.0\n",
       "campaign_id                0      0.0\n",
       "advert_industry_inner      0      0.0\n",
       "orderid                    0      0.0\n",
       "advert_id                  0      0.0\n",
       "adid                       0      0.0\n",
       "osv                        0      0.0"
      ]
     },
     "execution_count": 191,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 填补后的情况\n",
    "Total = data.isnull().sum().sort_values(ascending=False)\n",
    "Percent = (data.isnull().sum()/data.isnull().count()\n",
    "           ).sort_values(ascending=False)*100\n",
    "missing_data = pd.concat([Total, Percent], axis=1, keys=[\"Total\", \"Percent\"])\n",
    "missing_data[:11]"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 处理数据"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 192,
   "metadata": {},
   "outputs": [],
   "source": [
    "# 取出训练集数据索引\n",
    "train_index = data[data.click != -1].index\n",
    "test_index = data[data.click == -1].index\n",
    "\n",
    "train_y = pd.Series(data=data.loc[train_index, \"click\"])\n",
    "train = data.iloc[train_index, :]\n",
    "test = data.iloc[test_index, :]\n",
    "\n",
    "del test[\"click\"]\n",
    "del train[\"click\"]"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 保存数据"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [],
   "source": [
    "data.to_csv(\"data/deal_data.csv\", index=False)\n",
    "train.to_csv(\"data/train.csv\", index=False)\n",
    "train_y.to_csv(\"data/train_label.csv\", index=False)\n",
    "test.to_csv(\"data/test.csv\", index=False)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 建模"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [],
   "source": [
    "# data = pd.read_csv('data/deal_data.csv', low_memory=False)\n",
    "train = pd.read_csv('data/train.csv', low_memory=False)\n",
    "test = pd.read_csv(\"data/test.csv\", low_memory=False)\n",
    "train_y = pd.read_csv(\"data/train_label.csv\", low_memory=False)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Index(['city', 'province', 'user_tags', 'carrier', 'devtype', 'make', 'model',\n",
       "       'nnt', 'os', 'osv', 'os_name', 'adid', 'advert_id', 'orderid',\n",
       "       'advert_industry_inner', 'campaign_id', 'creative_id',\n",
       "       'creative_tp_dnf', 'app_cate_id', 'f_channel', 'app_id',\n",
       "       'inner_slot_id', 'creative_type', 'creative_width', 'creative_height',\n",
       "       'creative_is_jump', 'creative_is_download', 'creative_has_deeplink',\n",
       "       'advert_name', 'day', 'hour', 'hour_part', 'new_make', 'new_model',\n",
       "       'advert_industry_inner1', 'advert_industry_inner2', 'inner_slot_id1',\n",
       "       'osv1', 'osv2', 'osv3', 'os_name1', 'user_id'],\n",
       "      dtype='object')"
      ]
     },
     "execution_count": 7,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "train.columns"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {},
   "outputs": [],
   "source": [
    "import xgboost as xgb\n",
    "from sklearn.model_selection import GridSearchCV\n",
    "from sklearn.ensemble import RandomForestClassifier\n",
    "from sklearn.svm import SVC\n",
    "from sklearn.model_selection import KFold\n",
    "from sklearn.model_selection import cross_val_score\n",
    "from sklearn.tree import DecisionTreeClassifier\n",
    "from sklearn.metrics import log_loss  # 模型评判指标\n",
    "import sklearn\n",
    "import joblib\n",
    "import lightgbm as lgb\n",
    "from time import time\n",
    "import datetime"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 201,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "dict_keys(['explained_variance', 'r2', 'max_error', 'neg_median_absolute_error', 'neg_mean_absolute_error', 'neg_mean_squared_error', 'neg_mean_squared_log_error', 'neg_root_mean_squared_error', 'neg_mean_poisson_deviance', 'neg_mean_gamma_deviance', 'accuracy', 'roc_auc', 'roc_auc_ovr', 'roc_auc_ovo', 'roc_auc_ovr_weighted', 'roc_auc_ovo_weighted', 'balanced_accuracy', 'average_precision', 'neg_log_loss', 'neg_brier_score', 'adjusted_rand_score', 'homogeneity_score', 'completeness_score', 'v_measure_score', 'mutual_info_score', 'adjusted_mutual_info_score', 'normalized_mutual_info_score', 'fowlkes_mallows_score', 'precision', 'precision_macro', 'precision_micro', 'precision_samples', 'precision_weighted', 'recall', 'recall_macro', 'recall_micro', 'recall_samples', 'recall_weighted', 'f1', 'f1_macro', 'f1_micro', 'f1_samples', 'f1_weighted', 'jaccard', 'jaccard_macro', 'jaccard_micro', 'jaccard_samples', 'jaccard_weighted'])"
      ]
     },
     "execution_count": 201,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "sklearn.metrics.SCORERS.keys()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 定义交叉验证指标"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 203,
   "metadata": {},
   "outputs": [],
   "source": [
    "# sklearn.metrics.SCORERS.keys()\n",
    "\n",
    "def log_loss1(model, x, y):\n",
    "    \"\"\"定义指标\"\"\"\n",
    "\n",
    "    log_loss = -cross_val_score(model, x, y, scoring=\"neg_log_loss\", cv=5\n",
    "                                )\n",
    "    return log_loss"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 网格搜索"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 204,
   "metadata": {},
   "outputs": [],
   "source": [
    "class GridSearch:\n",
    "    \"\"\"回归模型网格搜索\"\"\"\n",
    "\n",
    "    def __init__(self, model):\n",
    "        self.model = model\n",
    "\n",
    "    def grid_get(self, X, y, param_grid):\n",
    "        \"\"\"参数搜索\"\"\"\n",
    "        grid_search = GridSearchCV(self.model, param_grid=param_grid, scoring=\"neg_log_loss\", cv=5\n",
    "                                   )\n",
    "        grid_search.fit(X, y)\n",
    "        print(grid_search.best_params_, (-grid_search.best_score_))\n",
    "        print(pd.DataFrame(grid_search.cv_results_)[\n",
    "              [\"params\", \"mean_test_score\", \"std_test_score\"]])"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 模型选择与调参 "
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### XGBoost模型"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {},
   "outputs": [],
   "source": [
    "y = train_y.values.flatten()\n",
    "train_df = train.copy()\n",
    "test_df = test.copy()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {},
   "outputs": [],
   "source": [
    "# 删除数据进行尝试\n",
    "for col in [\"user_tags\", \"osv1\", \"osv2\", \"osv3\"]:\n",
    "    train_df = train_df.drop(col, axis=1)\n",
    "    test_df = test_df.drop(col, axis=1)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 209,
   "metadata": {},
   "outputs": [],
   "source": [
    "# # param\n",
    "# xgb_model = xgb.XGBClassifier(verbosity = 0)\n",
    "# param_gird = {}\n",
    "# t0 = time()\n",
    "# GridSearch(xgb_model).grid_get(train_df, y, param_gird)\n",
    "# print(\"处理时间：\",datetime.datetime.fromtimestamp(time()-t0).strftime(\"%M:%S:%f\"))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "metadata": {},
   "outputs": [],
   "source": [
    "# xgb_model.fit(train_df, y)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "metadata": {},
   "outputs": [],
   "source": [
    "# xgb_model.score(train_df, train_y)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "metadata": {},
   "outputs": [],
   "source": [
    "# ## 网格搜索参数\n",
    "# num_round = np.arange(300, 500, 100)\n",
    "# val = []\n",
    "# for i in num_round:\n",
    "#     xgb_model = xgb.XGBClassifier(n_estimators=i)\n",
    "#     val.append(cross_val_score(xgb_model\n",
    "#                                , train_df\n",
    "#                                , y\n",
    "#                                , cv=5\n",
    "#                                , scoring=\"neg_log_loss\"\n",
    "#                               ).mean())\n",
    "\n",
    "# plt.plot(num_round, val)\n",
    "# plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### LightGBM\n",
    "0. 确定任务类型(回归、分类、排序等)，以及基学习器的类型(dark, gbdt、RF)  \n",
    "1. 首先选择较高的学习率，大概0.1附近，这样是为了加快收敛的速度。这对于调参是很有必要的。\n",
    "2. 对决策树基本参数调参\n",
    "3. 正则化参数调参\n",
    "4. 最后降低学习率，这里是为了最后提高准确率"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {},
   "outputs": [],
   "source": [
    "data_train = lgb.Dataset(train_df, y)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### 初始化状态(未调参)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 42,
   "metadata": {},
   "outputs": [],
   "source": [
    "# 参数设定为默认状态\n",
    "\n",
    "params1 = {\n",
    "    \"boosting_type\": \"gbdt\", \"objective\": \"binary\"  # 二分类任务\n",
    "    # 由于lightGBM是leaves_wise生长，官方说法是要小于2^max_depth\n",
    "    , \"metric\": {\"binary_logloss\", \"auc\"}, \"nthread\": 4, \"device\": \"gpu\", \"gpu_device_id\": 1, \"verbose\": 1, \"learning_rate\": 0.1, \"max_depth\": 5, \"num_leaves\": 31, \"subsample\": 1.0  # 数据采样\n",
    "    , \"colsample_bytree\": 1.0  # 特征采样\n",
    "\n",
    "    , 'reg_alpha': 0.0  # L1\n",
    "    , 'reg_lambda': 0.0  # L2\n",
    "}"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 43,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "参数处理时间： 01:06:799278\n"
     ]
    }
   ],
   "source": [
    "t0 = time()\n",
    "cv_result1 = lgb.cv(params=params1, train_set=data_train, nfold=5, stratified=True, shuffle=True  # , metrics=\"binary_logloss\"\n",
    "                    , seed=0\n",
    "                    )\n",
    "print(\"参数处理时间：\", datetime.datetime.fromtimestamp(time()-t0).strftime(\"%M:%S:%f\"))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### 调整好的参数状态"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 216,
   "metadata": {},
   "outputs": [],
   "source": [
    "num_boost_round = 3000\n",
    "params2 = {\n",
    "    \"boosting_type\": \"gbdt\", \"objective\": \"binary\"  # 二分类任务\n",
    "    # 由于lightGBM是leaves_wise生长，官方说法是要小于2^max_depth\n",
    "    , \"metric\": {\"binary_logloss\", \"auc\"}, \"nthread\": 4, \"device\": \"gpu\", \"gpu_device_id\": 1, \"verbose\": 1, \"learning_rate\": 0.01, \"max_depth\": 6, \"num_leaves\": 41, \"subsample\": 0.8  # 数据采样\n",
    "    , \"colsample_bytree\": 0.8  # 特征采样\n",
    "\n",
    "    , 'reg_alpha': 0.0  # L1\n",
    "    , 'reg_lambda': 0.0  # L2\n",
    "}"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 36,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "参数处理时间： 28:52:279001\n"
     ]
    }
   ],
   "source": [
    "t0 = time()\n",
    "cv_result2 = lgb.cv(params=params2, train_set=data_train, num_boost_round=num_boost_round, nfold=5, stratified=True, shuffle=True  # , metrics=\"binary_logloss\"\n",
    "                    #        , early_stopping_rounds=50\n",
    "                    , seed=0\n",
    "                    )\n",
    "print(\"参数处理时间：\", datetime.datetime.fromtimestamp(time()-t0).strftime(\"%M:%S:%f\"))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 37,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Best_n_estimators: 3000\n",
      "Best_cv_score: 0.4166\n"
     ]
    }
   ],
   "source": [
    "#  选择最佳的estimators\n",
    "print(\"Best_n_estimators: %d\\nBest_cv_score: %.4f\"\n",
    "      % (np.array(list(cv_result2.values())).shape[1],\n",
    "         min(np.array(list(cv_result2.values()))[0]))\n",
    "      )"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### 调参数状态"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 38,
   "metadata": {},
   "outputs": [],
   "source": [
    "params3 = {\n",
    "    \"boosting_type\": \"gbdt\", \"objective\": \"binary\"  # 二分类任务\n",
    "    # 由于lightGBM是leaves_wise生长，官方说法是要小于2^max_depth\n",
    "    , \"metric\": {\"binary_logloss\", \"auc\"}, \"nthread\": 4, \"device\": \"gpu\", \"gpu_device_id\": 1, \"verbose\": 1, \"learning_rate\": 0.01, \"max_depth\": 6, \"num_leaves\": 31, \"subsample\": 0.8  # 数据采样\n",
    "    , \"colsample_bytree\": 0.8  # 特征采样\n",
    "\n",
    "    , 'reg_alpha': 0.0  # L1\n",
    "    , 'reg_lambda': 0.0  # L2\n",
    "}"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 39,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "处理时间： 27:40:536119\n"
     ]
    }
   ],
   "source": [
    "t0 = time()\n",
    "cv_result3 = lgb.cv(params=params3, train_set=data_train, num_boost_round=3000, nfold=5, stratified=True, shuffle=True  # , metrics=\"binary_logloss\"\n",
    "                    #        , early_stopping_rounds=50\n",
    "                    , seed=0\n",
    "                    )\n",
    "print(\"处理时间：\", datetime.datetime.fromtimestamp(time()-t0).strftime(\"%M:%S:%f\"))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### 可视化指标"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### 1. logloss指标"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 44,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 1008x360 with 2 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "fig, ax = plt.subplots(1, 2, figsize=(14, 5))\n",
    "\n",
    "length1 = np.array(list(cv_result1.values())).shape[1]\n",
    "length2 = np.array(list(cv_result2.values())).shape[1]\n",
    "length3 = np.array(list(cv_result3.values())).shape[1]\n",
    "\n",
    "ax[0].plot(range(length1), cv_result1[list(\n",
    "    cv_result1.keys())[0]], label=\"param1\", c=\"red\")\n",
    "ax[1].plot(range(length1), cv_result1[list(cv_result1.keys())[1]],\n",
    "           label=\"param1\", c=\"green\")\n",
    "\n",
    "ax[0].plot(range(length2), cv_result2[list(cv_result2.keys())[0]],\n",
    "           label=\"param2\", c=\"magenta\")\n",
    "ax[1].plot(range(length2), cv_result2[list(\n",
    "    cv_result2.keys())[1]], label=\"param2\", c=\"blue\")\n",
    "\n",
    "ax[0].plot(range(length3), cv_result3[list(cv_result3.keys())[0]],\n",
    "           label=\"param3\", c=\"yellow\")\n",
    "ax[1].plot(range(length3), cv_result3[list(\n",
    "    cv_result3.keys())[1]], label=\"param3\", c=\"c\")\n",
    "\n",
    "ax[0].set_xlabel(\"num_round\", fontsize=12)\n",
    "ax[1].set_xlabel(\"num_round\", fontsize=12)\n",
    "ax[0].set_ylabel(list(cv_result1.keys())[0], fontsize=12)\n",
    "ax[1].set_ylabel(list(cv_result1.keys())[1], fontsize=12)\n",
    "ax[0].set_ylim((0.37, 0.5))\n",
    "ax[0].legend()\n",
    "ax[1].legend()\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### 2. AUC指标"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 47,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 1008x360 with 2 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "fig, ax = plt.subplots(1, 2, figsize=(14, 5))\n",
    "\n",
    "length1 = np.array(list(cv_result1.values())).shape[1]\n",
    "length2 = np.array(list(cv_result2.values())).shape[1]\n",
    "length3 = np.array(list(cv_result3.values())).shape[1]\n",
    "\n",
    "ax[0].plot(range(length1), cv_result1[list(\n",
    "    cv_result1.keys())[2]], label=\"param1\", c=\"red\")\n",
    "ax[1].plot(range(length1), cv_result1[list(cv_result1.keys())[3]],\n",
    "           label=\"param1\", c=\"green\")\n",
    "\n",
    "ax[0].plot(range(length2), cv_result2[list(cv_result2.keys())[2]],\n",
    "           label=\"param2\", c=\"magenta\")\n",
    "ax[1].plot(range(length2), cv_result2[list(\n",
    "    cv_result2.keys())[3]], label=\"param2\", c=\"blue\")\n",
    "\n",
    "ax[0].plot(range(length3), cv_result3[list(cv_result3.keys())[2]],\n",
    "           label=\"param3\", c=\"yellow\")\n",
    "ax[1].plot(range(length3), cv_result3[list(\n",
    "    cv_result3.keys())[3]], label=\"param3\", c=\"c\")\n",
    "\n",
    "ax[0].set_xlabel(\"num_round\", fontsize=12)\n",
    "ax[1].set_xlabel(\"num_round\", fontsize=12)\n",
    "ax[0].set_ylabel(list(cv_result1.keys())[2], fontsize=12)\n",
    "ax[1].set_ylabel(list(cv_result1.keys())[3], fontsize=12)\n",
    "ax[0].set_ylim((0.74, 0.78))\n",
    "ax[0].legend()\n",
    "ax[1].legend()\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### 网格搜索参数"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "metadata": {},
   "outputs": [],
   "source": [
    "param_grid = {\n",
    "    #      \"num_leaves\": np.arange(31, 82, 7)\n",
    "    #     , \"max_depth\": np.arange(4, 9, 1)\n",
    "    #     , \"learning_rate\": [0.1, 0.01, 0.001]\n",
    "    \"n_estimators\": np.arange(4000, 20000, 2000)\n",
    "    #     , \"subsample\":[0.8, 0.9, 1.0]\n",
    "    #     , \"colsample_bytree\":[0.8, 0.9, 1.0]\n",
    "}"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 31,
   "metadata": {
    "slideshow": {
     "slide_type": "slide"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "{'n_estimators': 8000} 0.41610264584572487\n",
      "                    params  mean_test_score  std_test_score\n",
      "0   {'n_estimators': 4000}        -0.416440        0.000697\n",
      "1   {'n_estimators': 6000}        -0.416204        0.000707\n",
      "2   {'n_estimators': 8000}        -0.416103        0.000734\n",
      "3  {'n_estimators': 10000}        -0.416170        0.000841\n",
      "4  {'n_estimators': 12000}        -0.416320        0.001018\n",
      "5  {'n_estimators': 14000}        -0.416394        0.001115\n",
      "6  {'n_estimators': 16000}        -0.416516        0.001140\n",
      "7  {'n_estimators': 18000}        -0.416641        0.001286\n",
      "处理时间： 48:18:072338\n"
     ]
    }
   ],
   "source": [
    "t0 = time()\n",
    "LGBC = lgb.LGBMClassifier(boosting_type=\"gbdt\", device=\"gpu\", learning_rate=0.01, max_depth=6, subsample=0.8, num_leaves=41, colsample_bytree=0.8, n_estimators=2000, metric=\"binary_logloss\", random_state=0, silent=False\n",
    "                          )\n",
    "GridSearch(LGBC).grid_get(X=train_df, y=y, param_grid=param_grid)\n",
    "print(\"处理时间：\", datetime.datetime.fromtimestamp(time()-t0).strftime(\"%M:%S:%f\"))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### 最终预测结果"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 220,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "处理时间： 08:23:193281\n"
     ]
    }
   ],
   "source": [
    "#  最终预测\n",
    "t0 = time()\n",
    "lgb_c = lgb.train(params=params2, train_set=data_train, num_boost_round=8000\n",
    "                  #        , nfold=5\n",
    "                  #        , stratified=True\n",
    "                  #        , shuffle=True\n",
    "\n",
    "                  #        , metrics=\"binary_logloss\"\n",
    "                  #        , early_stopping_rounds=50\n",
    "                  #        , seed=0\n",
    "                  )\n",
    "print(\"处理时间：\", datetime.datetime.fromtimestamp(time()-t0).strftime(\"%M:%S:%f\"))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 223,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "['data/model_lgb.pkl']"
      ]
     },
     "execution_count": 223,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "#  保存模型\n",
    "joblib.dump(lgb_c, \"data/model_lgb.pkl\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 224,
   "metadata": {},
   "outputs": [],
   "source": [
    "result = lgb_c.predict(test_df)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 225,
   "metadata": {},
   "outputs": [],
   "source": [
    "df = pd.DataFrame(data={\"instance_id\": res.values, \"predicted_score\": result})\n",
    "df.to_csv(\"./data/submission.csv\", index=False)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 226,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>instance_id</th>\n",
       "      <th>predicted_score</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>1009009142796670741</td>\n",
       "      <td>0.223051</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>8642631927498444908</td>\n",
       "      <td>0.203957</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>3653599391026039809</td>\n",
       "      <td>0.319694</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>2085762395056613521</td>\n",
       "      <td>0.214995</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>1229975129921178533</td>\n",
       "      <td>0.058041</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>...</th>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>80271</th>\n",
       "      <td>1554998588425867381</td>\n",
       "      <td>0.290979</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>80272</th>\n",
       "      <td>1794440027131895885</td>\n",
       "      <td>0.264205</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>80273</th>\n",
       "      <td>6389060012901553428</td>\n",
       "      <td>0.149469</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>80274</th>\n",
       "      <td>6172278880197688444</td>\n",
       "      <td>0.002667</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>80275</th>\n",
       "      <td>2678491326710555098</td>\n",
       "      <td>0.013162</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>80276 rows × 2 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "               instance_id  predicted_score\n",
       "0      1009009142796670741         0.223051\n",
       "1      8642631927498444908         0.203957\n",
       "2      3653599391026039809         0.319694\n",
       "3      2085762395056613521         0.214995\n",
       "4      1229975129921178533         0.058041\n",
       "...                    ...              ...\n",
       "80271  1554998588425867381         0.290979\n",
       "80272  1794440027131895885         0.264205\n",
       "80273  6389060012901553428         0.149469\n",
       "80274  6172278880197688444         0.002667\n",
       "80275  2678491326710555098         0.013162\n",
       "\n",
       "[80276 rows x 2 columns]"
      ]
     },
     "execution_count": 226,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "pd.read_csv(\"./data/submission.csv\")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 探索性分析"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 特征重要性"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "metadata": {},
   "outputs": [],
   "source": [
    "lgbc = joblib.load(\"data/model_lgb.pkl\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([0.22305082, 0.20395655, 0.31969421, ..., 0.14946937, 0.00266705,\n",
       "       0.0131616 ])"
      ]
     },
     "execution_count": 18,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "lgbc.predict(test_df)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 77,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAz8AAAJVCAYAAADwTUvLAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4yLjIsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy+WH4yJAAAgAElEQVR4nOzdeZxcVZ338U8v6Wxkh4aAMbLlJKgzKkIGJcAYBIS4MYIgMMYREeEZUBAyRkAQCeCDLDI4ssk2KqiDikFcwFFgRjOQeYYZTXMIio4EshCykd7S6Xr+uNWdqu5Kuqq6qrf7eb9eeaX79L2/PlX39K37vefeqppMJoMkSZIkjXS1g90BSZIkSRoIhh9JkiRJqWD4kSRJkpQKhh9JkiRJqWD4kSRJkpQKhh9JkiRJqVA/2B0o1fLly31vbkmSJEm7dPDBB9f0asxkMsPq39NPP50pxooVK4parliVrleNmsOhj9WoaR+HZr1q1BwOfaxGTfs4NOtVo+Zw6GM1atrHoVlvuNS0j0OzXjVqllIvmxl6ZQkve5MkSZKUCoYfSZIkSalg+JEkSZKUCsPuDQ8kSZKkatq+fTt/+tOf6OzsrEi9TCbDCy+8UJFa1ao5XPuYyWSYPHkyU6dOLaqG4UeSJEnKUVNTw957782oUaMqUq+lpYWxY8dWpFa1ag7XPnYFomLDj5e9SZIkSTlqamoqFnxUXTU1NdTU9H5H650x/EiSJElKBcOPJEmSNMiWLVvGF7/4xar+jgULFgDw+OOP8+Mf/7iqv2uo8p4fSZIkKUWOOOKIwe7CoDH8SJIkSbuyZUvyr0tNDUyfDh0dsHZt/rJTp8KYMbBuHWzblrS1tEBjI0yYsMtf84c//IFPfepTvPzyy/zDP/wDTU1N/Ou//itbtmzhlFNO4cMf/jDPPPMMV155JaNHj2bfffflS1/6Es8++yxXX301nZ2d7LvvvlxxxRW7vA/mwQcfZMOGDXz84x/n3e9+N4ceeigrVqxgwYIFfPzjH2fTpk1ceumlbNy4kdGjR3PttdcW/YYCQ52XvUmSJEm78pWvwD777Pg3e3bS/sc/5rfvsw/8/OfJz9773u62sQcckNTow+bNm/nHf/xHbrvtNq677jo+/OEPc++99/LAAw9wzz330NnZyS9/+UvOOuss7rjjju7L5K666iquu+467rvvPsaNG8eTTz5Z9EN75ZVXuOiii7jnnnv4zne+A8Btt93G+9//fu69915OPfVU7rrrrpKerqHMmR9JkiRpVy68EM46a8f3XbMqb3gDrFqVv2zXDMmPftQ989PS0sLYxsY+f81BBx1EXV0djY2NtLW18eMf/5jvf//71NTUsHbtWjZt2sRpp53G17/+dR5++GGOPPJITjzxRFauXMkFF1wAwNatWznwwAOLfmh77703kydPpqWlpfsd7lauXMny5cu5++676ejoKKneUGf4kSRJknZlwoTCl6zV18PeexdeZ489dnzd0gJFfN7NihUr6Ozs5NVXX6WhoYFbb72Vhx9+GIDjjjuOTCbD+PHjueSSS2hubuaDH/wgCxYsYNasWdx4443dl6Zt67rcrgiFLo/bf//9ecc73sG8efMAaG9vL7reUGf4kSRJkoaAadOmcc4557B69WoWLVrEz372M0499VRmzZrFxIkTAXjggQf42c9+xvbt25k3bx4NDQ0sXryYCy+8kI6ODmpra7nkkkv6NVtz9tlnc9lll3HHHXfQ2dnJySefzHvf+95KPcxBZfiRJEmSBtncuXOZO3duXtthhx3Wa7mFCxeycOHC5FK67GzS7Nmzi7ovZ+nSpQCceOKJvdpyv540aRI33XRT6Q9iGDD8SJIkSSPI888/zxVXXJHXds455xQMU2lj+JEkSZJGkAMOOID77rtvsLsxJPlW15IkSZJSwfAjSZIkKRVGxGVvG5vbaevozGub2DiDNZtb89pG19cyeVzDQHZNkiRJ0hAxIsJPW0cnc5c81udyyxbPH4DeSJIkaSQpdKK9FJkMtGXad3kSft26ddx7771ceOGFZf+eYnzzm9/ktNNOq+rvGMpGRPiRJEmSqqXYE+270tdJ+D322KPqwWf79u18+9vfHlbhJ5PJAIU/jLUchh9JkiRpkL344otceeWV3HrrrZxxxhnMnj2b3/3ud+y///5Mnz6dxx9/nH333Zerr76aBx98kJ/+9KdkMhnWr1/P1VdfzaxZs/j5z3/ObbfdBsDf/M3fcMopp3DzzTezatUqNm7cyLHHHsuLL77IGWecwdFHH82sWbP42te+xrZt25g5cybXXnstL774IhdccAEzZszgueee4+yzz+aEE07gxRdf5LLLLmPbtm1MmTKFr371qzz77LNcffXVdHZ2su+++3LFFVfkhZTvfe97/OAHP2D8+PEce+yxnHbaaXzzm9/khz/8IZlMhrPPPpv58+cXrH3GGWfwpje9iaamJq677jq+8pWv8Oc//5na2lquvPJKZs6cWdbzbPiRJEmShpgjjzySz3/+83zwgx/kiCOO4JxzzuG0005j7dq13cvcdtttrFixguuvv55bbrmFG264ge9+97s0NDRwyimncMwxxwAwYcIErrnmGgDuvPPO7rfBbm5u7v76/PPP55lnnmHatGm88sor/PM//zOvvfYaZ555JieccAJf/vKX+dSnPsUhhxzC9u3bAbjqqqu4/vrr2WOPPbjmmmt48sknmTdvXnf/HnnkEW6//XamTp1KZ2cn69ev5/vf/z73338/ra2tnHzyyfz1X/91wdoABx98MIsWLeJb3/oWc+bM4bLLLuN///d/uemmm7j++uvLel4NP5IkSdIQc9BBBwHQ2NjI7Nmzu7/etGkTAG984xu7l1u1ahUbNmxgzz33ZPz48QDMnj2bF198EYC3vvWtBX9HjJGvfvWrbNu2jRdffJHVq1czbdo0DjjgABoaGpg6dSrt7e0AvPDCCxxyyCEA1NXVAbBy5UouuOACALZu3cqBBx6YV/+CCy7guuuuo729ndNOO43a2lpmz55NfX09u+22G42NjWzYsKFgbYC3vOUt3b/nmWee4Sc/+Ql1dXWMHTu27OfV8CNJkiQNYbmXknXdA9PU1ATAs88+yz777MOUKVNYs2YNW7dupaGhgaamJl73utcBUFtbW7DWrbfeysUXX8ycOXM477zzdnl/zb777svTTz/N29/+djo7O6mtrWXWrFnceOONTJ06FYBt27blrbPffvuxZMkSVq9ezac//WluueUWnn32WTo6OmhtbWXNmjVMmTKlYO3cfh9wwAGEEHj/+9/P2LFjuwNZOQw/kiRJ0i6Mrq/t17sGZzIZRtdX9uM1a2tr+cQnPsH69etZsmQJdXV1nH/++Xz0ox+lpqaGD33oQ92hJNdRRx3FWWedxbvf/W6OO+44PvvZz7LffvvR0dGxy9938cUXc+mll9LR0cHUqVO56aabWLx4MRdeeCEdHR3U1tZyySWX5M3+XHXVVaxZs4b29nY+8pGPMG3aND7wgQ9w6qmnkslkuOCCC6itrS1YO9dJJ53EFVdcwdKlS6mpqWH+/PksXLiw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\n",
      "text/plain": [
       "<Figure size 1008x576 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "feature_importance = [*zip(lgbc.feature_name(), lgbc.feature_importance())]\n",
    "df = pd.DataFrame(feature_impoetance, columns=[\"feature\", \"importance socre\"])\n",
    "df.plot(kind=\"bar\", figsize=(14, 8))\n",
    "plt.plot(np.arange(0, 38), [13000]*38, c=\"r\",\n",
    "         linestyle=\"--\", label=\"base_line\")\n",
    "plt.xticks(np.arange(0, 38), df.feature.tolist(), fontsize=12)\n",
    "plt.legend()\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 参考\n",
    "[pandas之 read_table函数读取txt文件](https://blog.csdn.net/u014453898/article/details/86601224)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 知识点"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 字符replace函数"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 38,
   "metadata": {},
   "outputs": [],
   "source": [
    "a = \"dsadasdsad\""
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 39,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "'ds d sds d'"
      ]
     },
     "execution_count": 39,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "a.replace(\"a\", \" \")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 40,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "'dsdsdsd'"
      ]
     },
     "execution_count": 40,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "a.replace(\"a\", \"\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.8.5"
  },
  "toc-autonumbering": true,
  "toc-showcode": false,
  "toc-showmarkdowntxt": false,
  "toc-showtags": false
 },
 "nbformat": 4,
 "nbformat_minor": 4
}
